高级算法作业

目录

  • 1. Diet Problem的原问题及其标准型
  • 2. 对偶问题及其标准型
  • 3. 原问题及对偶问题的编程求解
  • 4. 实验总结与心得

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

设Corn、Milk、Bread的数量分别为x1x_1x1​、x2x_2x2​、x3x_3x3​.
规划问题的原始形式如下:
minf=0.18x1+0.23x2+0.05x3s.t.{5000≤107x1+500x2+0x3≤500002000≤72x1+121x2+65x3≤22500≤xi≤10i=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.05x3​s.t.⎩⎨⎧​​5000≤107x1​+500x2​+0x3​≤500002000≤72x1​+121x2​+65x3​≤22500≤xi​≤10i=1,2,3​​
将约束拆分:
minf=0.18x1+0.23x2+0.05x3s.t.{107x1+500x2+0x3≥5000107x1+500x2+0x3≤5000072x1+121x2+65x3≥200072x1+121x2+65x3≤2250xi≤10i=1,2,3xi≥0i=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.05x3​s.t.⎩⎨⎧​​107x1​+500x2​+0x3​≥5000107x1​+500x2​+0x3​≤5000072x1​+121x2​+65x3​≥200072x1​+121x2​+65x3​≤2250xi​≤10i=1,2,3xi​≥0i=1,2,3​​

引入松弛变量(剩余变量)x4x_4x4​、x5x_5x5​、x6x_6x6​、x7x_7x7​、x8x_8x8​、x9x_9x9​、x10x_{10}x10​化为标准型:
minf=0.18x1+0.23x2+0.05x3+0x4+0x5+0x6+0x7+0x8+0x9+0x10s.t.{107x1+500x2+0x3−x4=5000107x1+500x2+0x3+x5=5000072x1+121x2+65x3−x6=200072x1+121x2+65x3+x7=2250x1+x8=10x2+x9=10x3+x10=10xi≥0i=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​+0x10​s.t.⎩⎨⎧​​107x1​+500x2​+0x3​−x4​=5000107x1​+500x2​+0x3​+x5​=5000072x1​+121x2​+65x3​−x6​=200072x1​+121x2​+65x3​+x7​=2250x1​+x8​=10x2​+x9​=10x3​+x10​=10xi​≥0i=1,2,...,10​​

2. 对偶问题及其标准型

对上述原问题的拆分形式,其对偶问题为:
maxw=5000y1+50000y2+2000y3+2250y4+10y5+10y6+10y7s.t.{107y1+107y2+72y3+72y4+y5≤0.18500y1+500y2+121y3+121y4+y6≤0.2365y3+65y4+y7≤0.05y1,y3≥0,y2,y4,y5,y6,y7≤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​+10y7​s.t.⎩⎨⎧​​107y1​+107y2​+72y3​+72y4​+y5​≤0.18500y1​+500y2​+121y3​+121y4​+y6​≤0.2365y3​+65y4​+y7​≤0.05y1​,y3​≥0,y2​,y4​,y5​,y6​,y7​≤0​​

引入松弛变量(剩余变量)y8y_8y8​、y9y_9y9​、y10y_{10}y10​,对应的标准型为:
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,y10≥0,y2,y4,y5,y6,y7≤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​+0y10​s.t.⎩⎨⎧​​107y1​+107y2​+72y3​+72y4​+y5​+y8​=0.18500y1​+500y2​+121y3​+121y4​+y6​+y9​=0.2365y3​+65y4​+y7​+y10​=0.05y1​,y3​,y8​,y9​,y10​≥0,y2​,y4​,y5​,y6​,y7​≤0​​
将变量定义域修改为yi≥0y_i\geq0yi​≥0,最终,标准型为
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,y2,y3,y4,y5,y6,y7,y8,y9,y10≥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=5000y1​−50000y2​+2000y3​−2250y4​−10y5​−10y6​−10y7​+0y8​+0y9​+0y10​s.t.⎩⎨⎧​​107y1​−107y2​+72y3​−72y4​−y5​+y8​=0.18500y1​−500y2​+121y3​−121y4​−y6​+y9​=0.2365y3​−65y4​−y7​+y10​=0.05y1​,y2​,y3​,y4​,y5​,y6​,y7​,y8​,y9​,y10​≥0​​

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

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

clear
clc
tic
%% 求原问题
A = [-107, -500, 0                % 系数矩阵107, 500, 0-72, -121, -6572, 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, 00, 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. 通过求解原问题与对偶问题,验证了线性规划的强对偶性定理,即“若原问题有最优解,那么对偶问题也有最优解,且最优值相等”。

食谱问题Diet Problem相关推荐

  1. 评论:Java 7并发食谱

    Java 7 Concurrency Cookbook包含60多个示例,向您展示了如何在Java中进行多线程编程. 它显示了从初级到高级的各种线程主题,包括创建,中断和监视线程之类的线程管理,使用Ja ...

  2. Python+Cplex学习笔记(三)—— docplex官方示例之营养膳食选择

    1 前言 网上能找到的python调用cplex示例实在太少,全英文的官方文档又十分难啃,还是从例子学起比较好,转了一圈找到github,发现IBM写了几个例子,但是又没有中文博客解释.借助网页和he ...

  3. MindOpt有关于Python的建模与优化

    目录 前言 一.安装 二.Python 的建模与优化 2-1.MdoModel类 2-2.MdoExprLinear类 2-3.官方案例--营养调配 总结 前言 周四,天气渐渐凉快了下来. 一.安装 ...

  4. 运筹学之线性规划与整数规划

    1.线性规划 参考<Operations Research>第三章Introduction to Linear Programming 1.1线性规划定义 线性规划问题(LP)包括三个部分 ...

  5. Prevent Your Acne With Your Diet

    来源:http://www.howbeauty.org/acne/223896.htm Though acne is not curable it can be prevented and treat ...

  6. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.

    所有的base 都要取消注释 mirrorlist 加上注释 另外所有的enable都要设为零 目录 今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现y ...

  7. A + B Problem

    1001: A + B Problem Description 计算 A + B. Input 多组测试数据,每组测试数据占一行,包括2个整数. Output 在一行中输出结果. Sample Inp ...

  8. Error:(49, 1) A problem occurred evaluating project ':guideview'. Could not read script 'https://r

    出现问题如下: Error:(49, 1) A problem occurred evaluating project ':guideview'. > Could not read script ...

  9. #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)

    题目链接:http://codeforces.com/contest/814/problem/B 题意 : 有一个给出两个含有 n 个数的序列 a 和 b, 这两个序列和(1~n)的其中一个全排列序列 ...

最新文章

  1. Lombok经常用,但是你知道它的原理是什么吗?
  2. TCP/IP***原理分析总结
  3. 聊聊flink Table的groupBy操作
  4. 虚拟人春节搞事情!先在央视《对话》,又跟李玉刚组团除夕出道
  5. 形象标识 新松机器人_东莞市81个乡村振兴重点项目集中启用,树立统一标识牌302块...
  6. MySQL之视图、触发器、事务、存储过程
  7. java amqp_AMQP协议
  8. vue.js初识(一)
  9. ionic iphone下的问题
  10. QEMU 源代码阅读经验开山之作
  11. struts2 与 spring 整合
  12. python3设置编码_PYTHON3编码再探究
  13. 硬件工程师的真实前途我说出来可能你们不信
  14. Python:给图形中添加文本注释(text函数)
  15. RDD优化--RDD共享变量(广播变量与累加器)
  16. stm32通过ESP8266连接互联网服务器,手机通过网页实现远程控制灯亮灭
  17. 十年内将被人遗忘的15种技术:硬盘和鼠标
  18. com.github.abel533.mapper.MapperProvider插件使用遇到的问题
  19. 一.二.管理和信息化软件的关系
  20. Springboot实现匹配系统(上)

热门文章

  1. 【随手小结】OKR工作法怎么用
  2. 你好,WebMIDI
  3. 《通信原理》复习笔记1----第一章绪论
  4. Kyligence Enterprise 查询缓存配置
  5. Python的优势在哪儿?这篇文章告诉你!
  6. 5*5矩阵,对角线的元素都为一,其余元素都是0
  7. Java Excel导出复杂excel表格样式之ExcelUtil工具类
  8. 叮咚买菜两年亏损50亿、上市难解盈利困局,红海市场求突围
  9. 滴滴打车?还是滴滴翻车?记滴滴自动驾驶首秀
  10. 张飞老师硬件第二十四部--马达驱动--原理图设计①----5三项直流无刷永磁电机相关