Спасибо за ваше время.
У меня есть линейная программа, и я понятия не имею, как я могу выразить форму ограничения, и даже если это возможно. Может здесь кто знает решение.
Компания собирает и продает смесь, состоящую из 3 ингредиентов, a, b и c, где a = b = c.
Каждый ингредиент может поступать с 2 заводов: f1 и f2.
Стоимость каждого ингредиента колеблются в течение дня и различны для каждой фабрики.
Каждая фабрика предоставляет стоимость каждого ингредиента в виде списка пар: (стоимость, доступная сумма).
Ограничение, которое я хочу выразить (не затрагивая существующую целевую функцию), но не знаю, как это сделать, заключается в следующем:
Избегайте выбора производственных затрат, превышающих мою продажную цену.
Например, в момент времени t затраты могут быть:
- for ingredient a :
f1 : (10$, 5.1), (11$, 10.2), (13$, 20.5)
f2 : (11$, 1.), (12$, 15.2), (13$, 6.9)
- for ingredient b :
f1 : (15$, 8.3), (16$, 20.), (18$, 10.7)
f2 : (15$, 4.2), (16$, 15.1), (18$, 19.3)
- for ingredient c :
f1 : (31$, 2.), (34$, 3.5), (37$, 14.9)
f2 : (30$, 4.7), (32$, 9.2), (35$, 12.4)
Я хотел бы получить наилучшее перераспределение для двух входных констант, а именно: maxAllowedQuantity и maxAllowedCost.
Но в настоящее время я обрабатываю только maxAllowedQuantity, и я хотел бы также обрабатывать maxAllowedCost (это цель моего вопроса).
Результирующее решение, состоящее из сумм для каждой стоимости, будет в выходных переменных:
amountAF1_1, amountAF1_2, amountAF1_3
amountAF2_1, amountAF2_2, amountAF2_3
amountBF1_1, amountBF1_2, amountBF1_3
amountBF2_1, amountBF2_2, amountBF2_3
amountCF1_1, amountCF1_2, amountCF1_3
amountCF2_1, amountCF2_2, amountCF2_3
Например, используя предоставленные данные примера и для входных данных maxAllowedQuantity = 15 (без ограничения maxAllowedCost, потому что я не знаю, как его сформулировать, и это то, о чем я спрашиваю), на основе некоторых целей на данный момент (например: я предпочитаю чтобы по справедливости разделить суммы между фабриками при одинаковой общей стоимости и не отдавать предпочтение одной фабрике),
я мог бы получить:
amountAF1_1 = 5.1, amountAF1_2 = 4.9, amountAF1_3 = 0.
amountAF2_1 = 0., amountAF2_2 = 5., amountAF2_3 = 0.
amountBF1_1 = 5., amountBF1_2 = 0., amountBF1_3 = 0.
amountBF2_1 = 4.2, amountBF2_2 = 5.8, amountBF2_3 = 0.
amountCF1_1 = 2., amountCF1_2 = 3.5, amountCF1_3 = 2.
amountCF2_1 = 4.7, amountCF2_2 = 2.8, amountCF2_3 = 0.
Что я могу обобщить с точки зрения затрат:
5.1a at 10$, 4.9a at 11$, 5.0a at 12$,
9.2b at 15$, 5.8b at 16$,
4.7c at 30$, 2.0c at 31$, 2.8c at 32$, 3.5c at 34$, 2.0c at 37$
Если мы разложим полученные смеси по стоимости, мы получим:
4.7 mixtures at 10 + 15 + 30 = 55$,
0.4 mixtures at 10 + 15 + 31 = 56$,
1.6 mixtures at 11 + 15 + 31 = 57$,
2.5 mixtures at 11 + 15 + 32 = 58$,
0.3 mixtures at 11 + 16 + 32 = 59$,
0.5 mixtures at 11 + 16 + 34 = 61$,
3.0 mixtures at 12 + 16 + 34 = 62$,
2.0 mixtures at 12 + 16 + 37 = 65$,
Здесь максимальная стоимость составляет 65 долларов.
Но если моя цена продажи составляет 60 долларов, чтобы не потерять деньги:
Как я могу добавить ограничение maxAllowedCost = 60 долларов?
Примечание: мы не можем просто взять предыдущий результат (без ограничения maxAllowedCost) и удалить суммы при затратах > 60 $, потому что моя целевая функция даст другое перераспределение для количеств при затратах ‹ = 60, если общее количество меньше: здесь 9,5 (15 - 0,5 - 3,0 - 2,0) вместо 15 ранее.
...
Спасибо