食谱问题Diet Problem

高级算法作业

在这里插入图片描述

1. Diet Problem的原问题及其标准型

设Corn、Milk、Bread的数量分别为 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3.
规划问题的原始形式如下:
m i n   f = 0.18 x 1 + 0.23 x 2 + 0.05 x 3 s . t . { 5000 ≤ 107 x 1 + 500 x 2 + 0 x 3 ≤ 50000 2000 ≤ 72 x 1 + 121 x 2 + 65 x 3 ≤ 2250 0 ≤ x i ≤ 10 i = 1 , 2 , 3 \begin{aligned} & min \, f=0.18x_1+0.23x_2+0.05x_3 \\ &s.t. \left\{ \begin{aligned} & 5000\leq 107x_1+500x_2+0x_3 \leq 50000\\ & 2000\leq 72x_1+121x_2+65x_3 \leq 2250 \\ & 0\leq x_i \leq 10 \quad i=1,2,3\\ \end{aligned} \right. \end{aligned} minf=0.18x1+0.23x2+0.05x3s.t. 5000107x1+500x2+0x350000200072x1+121x2+65x322500xi10i=1,2,3
将约束拆分:
m i n   f = 0.18 x 1 + 0.23 x 2 + 0.05 x 3 s . t . { 107 x 1 + 500 x 2 + 0 x 3 ≥ 5000 107 x 1 + 500 x 2 + 0 x 3 ≤ 50000 72 x 1 + 121 x 2 + 65 x 3 ≥ 2000 72 x 1 + 121 x 2 + 65 x 3 ≤ 2250 x i ≤ 10 i = 1 , 2 , 3 x i ≥ 0 i = 1 , 2 , 3 \begin{aligned} & min \, f=0.18x_1+0.23x_2+0.05x_3 \\ &s.t. \left\{ \begin{aligned} &107x_1+500x_2+0x_3 \geq 5000\\ & 107x_1+500x_2+0x_3 \leq 50000\\ & 72x_1+121x_2+65x_3 \geq 2000 \\ & 72x_1+121x_2+65x_3 \leq 2250 \\ & x_i \leq 10 \quad i=1,2,3\\ & x_i \geq 0 \quad i=1,2,3\\ \end{aligned} \right. \end{aligned} minf=0.18x1+0.23x2+0.05x3s.t. 107x1+500x2+0x35000107x1+500x2+0x35000072x1+121x2+65x3200072x1+121x2+65x32250xi10i=1,2,3xi0i=1,2,3

引入松弛变量(剩余变量) x 4 x_4 x4 x 5 x_5 x5 x 6 x_6 x6 x 7 x_7 x7 x 8 x_8 x8 x 9 x_9 x9 x 10 x_{10} x10化为标准型:
m i n   f = 0.18 x 1 + 0.23 x 2 + 0.05 x 3 + 0 x 4 + 0 x 5 + 0 x 6 + 0 x 7 + 0 x 8 + 0 x 9 + 0 x 10 s . t . { 107 x 1 + 500 x 2 + 0 x 3 − x 4 = 5000 107 x 1 + 500 x 2 + 0 x 3 + x 5 = 50000 72 x 1 + 121 x 2 + 65 x 3 − x 6 = 2000 72 x 1 + 121 x 2 + 65 x 3 + x 7 = 2250 x 1 + x 8 = 10 x 2 + x 9 = 10 x 3 + x 10 = 10 x i ≥ 0 i = 1 , 2 , . . . , 10 \begin{aligned} & min \, f=0.18x_1+0.23x_2+0.05x_3+0x_4+0x_5+0x_6+0x_7+0x_8+0x_9+0x_{10} \\ &s.t. \left\{ \begin{aligned} & 107x_1+500x_2+0x_3-x_4 =5000\\ & 107x_1+500x_2+0x_3+x_5= 50000\\ & 72x_1+121x_2+65x_3-x_6 =2000 \\ & 72x_1+121x_2+65x_3 +x_7= 2250 \\ & x_1+x_8=10 \\ & x_2+x_9=10 \\ & x_3+x_{10}=10\\ & x_i \geq 0 \quad i=1,2, ..., 10\\ \end{aligned} \right. \end{aligned} minf=0.18x1+0.23x2+0.05x3+0x4+0x5+0x6+0x7+0x8+0x9+0x10s.t. 107x1+500x2+0x3x4=5000107x1+500x2+0x3+x5=5000072x1+121x2+65x3x6=200072x1+121x2+65x3+x7=2250x1+x8=10x2+x9=10x3+x10=10xi0i=1,2,...,10

2. 对偶问题及其标准型

对上述原问题的拆分形式,其对偶问题为:
m a x   w = 5000 y 1 + 50000 y 2 + 2000 y 3 + 2250 y 4 + 10 y 5 + 10 y 6 + 10 y 7 s . t . { 107 y 1 + 107 y 2 + 72 y 3 + 72 y 4 + y 5 ≤ 0.18 500 y 1 + 500 y 2 + 121 y 3 + 121 y 4 + y 6 ≤ 0.23 65 y 3 + 65 y 4 + y 7 ≤ 0.05 y 1 , y 3 ≥ 0 ,   y 2 , y 4 , y 5 , y 6 , y 7 ≤ 0 \begin{aligned} & max\, w=5000y_1+50000y_2+2000y_3+2250y_4+10y_5+10y_6+10y_7 \\ &s.t. \left\{ \begin{aligned} &107y_1+107y_2+72y_3+72y_4+y_5 \leq 0.18\\ & 500y_1+500y_2+121y_3+121y_4+y_6\leq0.23 \\ & 65y_3+65y_4+y_7\leq0.05 \\ & y_1,y_3 \geq0,\, y_2,y_4, y_5,y_6,y_7\leq0\\ \end{aligned} \right. \end{aligned} maxw=5000y1+50000y2+2000y3+2250y4+10y5+10y6+10y7s.t. 107y1+107y2+72y3+72y4+y50.18500y1+500y2+121y3+121y4+y60.2365y3+65y4+y70.05y1,y30,y2,y4,y5,y6,y70

引入松弛变量(剩余变量) y 8 y_8 y8 y 9 y_9 y9 y 10 y_{10} y10,对应的标准型为:
m a x   w = 5000 y 1 + 50000 y 2 + 2000 y 3 + 2250 y 4 + 10 y 5 + 10 y 6 + 10 y 7 + 0 y 8 + 0 y 9 + 0 y 10 s . t . { 107 y 1 + 107 y 2 + 72 y 3 + 72 y 4 + y 5 + y 8 = 0.18 500 y 1 + 500 y 2 + 121 y 3 + 121 y 4 + y 6 + y 9 = 0.23 65 y 3 + 65 y 4 + y 7 + y 10 = 0.05 y 1 , y 3 , y 8 , y 9 , y 10 ≥ 0 ,   y 2 , y 4 , y 5 , y 6 , y 7 ≤ 0 \begin{aligned} & max\, w=5000y_1+50000y_2+2000y_3+2250y_4+10y_5+10y_6+10y_7+0y_8+0y_9+0y_{10} \\ &s.t. \left\{ \begin{aligned} &107y_1+107y_2+72y_3+72y_4+y_5+y_8 = 0.18\\ & 500y_1+500y_2+121y_3+121y_4+y_6+y_9=0.23 \\ & 65y_3+65y_4+y_7+y_{10}=0.05 \\ & y_1,y_3,y_8,y_9,y_{10} \geq0,\, y_2,y_4, y_5,y_6,y_7\leq0\\ \end{aligned} \right. \end{aligned} maxw=5000y1+50000y2+2000y3+2250y4+10y5+10y6+10y7+0y8+0y9+0y10s.t. 107y1+107y2+72y3+72y4+y5+y8=0.18500y1+500y2+121y3+121y4+y6+y9=0.2365y3+65y4+y7+y10=0.05y1,y3,y8,y9,y100,y2,y4,y5,y6,y70
将变量定义域修改为 y i ≥ 0 y_i\geq0 yi0,最终,标准型为
m a x   w = 5000 y 1 − 50000 y 2 + 2000 y 3 − 2250 y 4 − 10 y 5 − 10 y 6 − 10 y 7 + 0 y 8 + 0 y 9 + 0 y 10 s . t . { 107 y 1 − 107 y 2 + 72 y 3 − 72 y 4 − y 5 + y 8 = 0.18 500 y 1 − 500 y 2 + 121 y 3 − 121 y 4 − y 6 + y 9 = 0.23 65 y 3 − 65 y 4 − y 7 + y 10 = 0.05 y 1 , y 2 , y 3 , y 4 , y 5 , y 6 , y 7 , y 8 , y 9 , y 10 ≥ 0 \begin{aligned} & max\, w=5000y_1-50000y_2+2000y_3-2250y_4-10y_5-10y_6-10y_7+0y_8+0y_9+0y_{10} \\ &s.t. \left\{ \begin{aligned} &107y_1-107y_2+72y_3-72y_4-y_5+y_8 = 0.18\\ & 500y_1-500y_2+121y_3-121y_4-y_6+y_9=0.23 \\ & 65y_3-65y_4-y_7+y_{10}=0.05 \\ & y_1,y_2,y_3,y_4, y_5,y_6,y_7,y_8,y_9,y_{10} \geq0\\ \end{aligned} \right. \end{aligned} maxw=5000y150000y2+2000y32250y410y510y610y7+0y8+0y9+0y10s.t. 107y1107y2+72y372y4y5+y8=0.18500y1500y2+121y3121y4y6+y9=0.2365y365y4y7+y10=0.05y1,y2,y3,y4,y5,y6,y7,y8,y9,y100

3. 原问题及对偶问题的编程求解

使用MATLAB的线性规划求解工具linprog求解,代码及结果如下:

clear
clc
tic
%% 求原问题
A = [-107, -500, 0                % 系数矩阵
    107, 500, 0
    -72, -121, -65
    72, 121, 65];
b = [-5000, 50000, -2000, 2250];  % 常数项
lb = [0, 0, 0];      % 变量下界
ub = [10, 10, 10];   % 变量上界

Aeq = [];
beq = [];
f = [0.18,0.23,0.05];
fprintf('********** 求解原问题 **********\n');
x = linprog(f,A,b,Aeq,beq,lb,ub);
fprintf('x1 = %.4f\nx2 = %.4f\nx3 = %.4f\n', x(1), x(2), x(3));  
fprintf('函数值f: %.4f\n\n', x'*f');

%% 求对偶问题
A = [107, 107, 72, 72, 1, 0, 0                  % 系数矩阵
    500, 500, 121, 121, 0, 1, 0
    0, 0, 65, 65, 0, 0, 1]; 
b = [0.18, 0.23, 0.05];                         % 常数项
lb = [0, -inf, 0, -inf, -inf, -inf, -inf];      % 变量下界
ub = [inf, 0, inf, 0, 0, 0, 0];                 % 变量上界

Aeq = [];
beq = [];
f = -[5000, 50000, 2000, 2250, 10, 10, 10];   % 对偶问题是最大化问题,转换为最小化问题
fprintf('********** 求解对偶问题 **********\n');
y = linprog(f,A,b,Aeq,beq,lb,ub);
fprintf('y1 = %.4f\ny2 = %.4f\ny3 = %.4f\ny4 = %.4f\ny5 = %.4f\ny6 = %.4f\ny7 = %.4f\n'...
    , y(1), y(2), y(3), y(4), y(5), y(6), y(7));  
fprintf('函数值w: %.4f\n\n', -y'*f');
toc

在这里插入图片描述
可以看到,原问题与对偶问题的最优解对应的函数值相等(线性规划的强对偶性)。

4. 实验总结与心得

  1. 通过对经典线性规划问题Diet Problem的建模与求解,了解了线性规划问题的建模方式,学习了如何变换得到线性规划问题的标准型,并用求解器求解线性规划问题;
  2. 深入理解了如何将原问题转换为其对偶问题,并了解了其背后的意义(转化为另一个等价的线性规划问题);
  3. 通过求解原问题与对偶问题,验证了线性规划的强对偶性定理,即“若原问题有最优解,那么对偶问题也有最优解,且最优值相等”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值