0

Спасибо за ваше время.Может ли это конкретное ограничение линейной программы выражаться?

У меня есть линейная программа и не знаю, как я могу выразить форму ограничения и даже если это возможно. Может быть, кто-то здесь знает решение.

Компания собирает и продает смесь, состоящую из 3 ингредиентов, a, b и c, с a = b = c.
Каждый ингредиент может быть изготовлен из двух фабрик: f1 и f2.
Стоимость каждого ингредиента колеблется весь день и отличается между каждой фабрикой.
Каждая фабрика обеспечивает расходы на каждый ингредиент в виде списка пар: (стоимость, доступная).

Ограничение Я хочу выразить (без влияния на существующую целевую функцию), и я не знаю, как это:
Избегайте выбирать manufacting расходы, которые больше, что моя цена продажи.

Например в момент времени т, затраты могут быть:

- 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) 

Я хотел бы получить лучший переделу для двух входных констант, которые являются: maximumAllowedQuantity и maximumAllowedCost.
Но в настоящее время я обрабатываю максимумAllowedQuantity, и я также хотел бы обработать максимумAllowedCost (это цель моего вопроса).

Полученный раствор, состоящий из суммы для каждых затрат будет в выходные переменные:

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 

Например, используя пример данных, предоставленные, а также для ввода maximumAllowedQuantity = 15 (без maximumAllowedCost ограничений причины я не» я знаю, как сформулировать это, и это то, о чем я прошу), основываясь на некоторых целях момента (например, я предпочитаю равномерно распределять суммы между заводами за одну и ту же общую стоимость и не поддерживать одну фабрику),
Я мог бы получить:

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 $, чтобы избежать потери денег:
Как я могу добавить ограничение maximumAllowedCost = 60 $?

нб: мы не можем просто взять предыдущий результат (без maximumAllowedCost ограничения) и удалите суммы на затраты> 60 $, потому что моя целевая функция даст еще переделу для величин при затратах < = 60, если общее количество меньше : здесь 9.5 (15 - 0.5 - 3.0 - 2.0) вместо 15 раньше.
...

Благодаря

ответ

0

Позвольте мне изложить свой вопрос.Каждая фабрика f дает вам список предложений (пары количеств цены) для ингредиента i. Давайте писать (и индекс) в j е предложение как

(price[j, f, i], quantity[j, f, i]) 

Это звучит как ваша цель состоит в том, чтобы решить, какие ставки принять, с учетом ограничений на получение прибыли.

x[j, f, i] 0 0 0 0 0 Вы не можете приобрести отрицательное количество ингредиента, и вы не можете купить больше, чем количество завода предлагает в этих заявках, поэтому мы имеем

0 <= x[j, f, i] <= quantity[j, f, i] for all j, f, i 

В x s является вашими переменными решениями.

Стоимость, которую вы платите за принятие заявки j, составляет price[j, f,i] * x[j, f, i].

Так общая стоимость вы платите на все заводы для ингредиентов дается

sum_{j, f, i} price[j, f, i]*x[j, f, i] 

Пусть m представляют количество смеси вы создаете с этими ингредиентами. m будет переменной принятия решения. Смесь состоит из равных частей каждого ингредиента. Таким образом, количество смеси, которую вы можете создать, ограничено самым дефицитным ингредиентом. То есть

m <= sum_{j, f} x[j,f,i] for all i 

Вы производите $ 60 (скажем) за продажу одной единицы смеси. Таким образом, ваш доход предоставляется 60*m.

прибыль вы делаете это доход - стоимость или

60*m - sum_{j, f, i} price[j, f, i]*x[j, f, i] 

Чтобы обеспечить производственные затраты меньше или равна вашей продажной цены, вы просто обеспечить вашу прибыль неотрицательна. Или

60*m - sum_{j, f, i} price[j, f, i]*x[j, f, i] >= 0 

Это ваши ограничения, и вы можете поместить любую цель на нее, которая вам нравится. Например, вы можете максимизировать свою прибыль, пытаясь разделить ваши покупки как можно более равномерно на фабриках.

Для этого позвольте y[f] представляют количество, приобретенное с завода f. Тогда

y[f] == sum_{j, i} x[j, f, i] for all f 

Для каждой пары фабрик f1, f2 мы можем вычислить разницу в количестве купленного в z[f1, f2] где

z[f1, f2] >= y[f1] - y[f2] for all factory pairs (f1, f2) 
z[f1, f2] >= y[f2] - y[f1] for all factory pairs (f1, f2) 

Это дает нам следующую линейную программу

minimize  -p + sum_{all factory pairs f1, f2} z[f1, f2] 
x,m,y,z,p 

subject to p == 60*m - sum_{j, f, i} price[j, f, i]*x[j, f, i] 
       y[f] == sum_{j, i} x[j, f, i] for all f 
       m <= sum_{j, f} x[j, f, i] for all i 
       z[f1, f2] >= y[f1] - y[f2] for all factory pairs (f1, f2) 
       z[f2, f1] >= y[f2] - y[f1] for all factory pairs (f1, f2) 
       x[j, f, i] <= quantity[j, f, i] for all j, f, i     
       0 <= x[j, f, i] for all j, f, i 
       0 <= m 
       0 <= y[f] for all f 
       0 <= p 
+0

Спасибо большое за ваш ответ – infiniteLoop