-
Решить задачу стохастического программирования для одной из однокритериальных задач, превратив детерминированное ограничение в вероятностное по схеме:
Целевые функции:
Эффект, прибавленный к вкусу, будем называть удовольствием, и он равен:
f1 = 0.5x1 + 2x2 + 5x5 + 0.3x1 + 5x3 + 4x4 + x5 + 5x6 → max
Последствия: f2 = 0.9x1 + 8x2 + 2x5 → min
Стоимость: 1) Если вес всего провианта(0.3x1 + x2 + x3 + x4 + x5 + 0.5x6 ) меньше 25:
f3 = 50x1 + 30x2 + 30x3 + 50x4 + 70x5 + 20x6 → min
2) Если вес всего провианта меньше или равен 25:
f3 = 50x1 + 30x2 + 30x3 + 50x4 + 70x5 + 20x6 + (0.3x1 + x2 + x3 + x4 + x5 + 0.5x6 – 25)*100
Ограничения:
по общему весу провианта: x1 + х2 + х3 + х4 + х5 + х6 ≤ 100
по минимальному весу каждого вида провианта:
x1 ≥ 0, x2 ≥ 0, x3 ≥ 3, x4 ≥ 2, x5 ≥ 0, x6 ≥ 0
по максимальному весу каждого вида провианта:
x1 ≤ 100, x2 ≤ 3, x3 ≤ 100, x4 ≤ 100, x5 ≤ 5, x6 ≤ 100
Ограничения, накладываемые задачей плохо подходят для вероятностной схемы, поэтому введем свое ограничение. К примеру, пусть последствия должны быть не меньше 10.
0.9x1 + 8x2 + 2x5 ≥ 10
Преобразуем его в вероятностное по схеме:
Допустим, что величина b является нормально распределенной случайной величиной с математическим ожиданием M(b) = 10 и дисперсией D(b) = 5. Приведем это ограничение к детерминированному:
x1 + х2 + х3 + х4 + х5 + х6 ≤ 10 – Kα* 2.236
где Kα – квантиль распределения Стьюдента, выбираемая в соответствии с α:
0.9 |
0.8 |
0.7 |
0.6 |
0.1584 |
0.3249 |
0.5095 |
0.7265 |
Решим многокритериальную задачу с использованием функции fgoalattain. Для точности я не округлял результаты. В реальности же нужно взять минимальное целое число, большее чем ответ.
ѺѺѺ x0=[0;0;3;2;0;0];
ѺѺѺ A=[1 1 1 1 1 1; -0.9 -8 0 0 -2 0];
ѺѺѺ B=[100; -10 + K*2.236];
ѺѺѺ LB=[0;0;3;2;0;0];
ѺѺѺ UB=[100;3;100;100;5;100];
ѺѺѺ
ѺѺѺ [x1, fval1] = fmincon(@pleasure, x0, A, B, [], [], LB, UB);
ѺѺѺ goal(1) = fval1;
ѺѺѺ
ѺѺѺ [x2, fval2] = fmincon(@aftermath, x0, A, B, [], [], LB, UB);
ѺѺѺ goal(2) = fval2;
ѺѺѺ
ѺѺѺ [x3, fval3] = fmincon(@money, x0, A, B, [], [], LB, UB);
ѺѺѺ goal(3) = fval3;
ѺѺѺ
ѺѺѺ weight = abs(goal);
ѺѺѺ
ѺѺѺ [x, fval, attf] = fgoalattain(@minmax, x0, goal, weight, A, B, [], [], ѺѺѺ LB, UB)
α |
Ответ |
Последствия |
attf |
|||||
0.9 |
0 |
1.2057 |
3 |
2 |
0 |
65.5523 |
9.6458 |
0.3003 |
0.8 |
0 |
1.1592 |
3 |
2 |
0 |
65.4261 |
9.2735 |
0.2993 |
0.7 |
0 |
1.1076 |
3 |
2 |
0 |
65.2857 |
8.8608 |
0.3009 |
0.6 |
0 |
1.0469 |
3 |
2 |
0 |
65.1199 |
8.3755 |
0.3028 |