系列目录

司守奎《数学建模算法与应用》课后习题:线性规划

模拟退火算法解决旅行商问题详解

遗传算法解决旅行商问题 MATLAB实现

基于模拟退火优化的投影寻踪评价法求解供货能力评价模型


目录

写在最前面:

1.1、常规求解线性规划

1.2、带有绝对值的线性规划求解

1.3、单下标求解生产利润问题

1.4 、双下标求解利润问题

最后给出一些基础帮助的链接:


写在最前面:

我是一个刚学数模的小白,觉得把自己的思路和代码啊公式写出来能提升学习效率,在参考了司守奎老师的《数学建模算法与应用》(第二版)一书后想把自己的想法分享给大家!如果下面的有错误,欢迎指正~~~参考一些博主的解答和文档会把链接放出来~~~代码使用MATLAB操作,公式使用AxMath编辑。


1.1、常规求解线性规划

需要注意三个问题:

1)分清哪些是列向量,哪些是行向量;

2)如“-2x1+x3”中的x2系数为0,但是不能忽略;

3)MATLAB 默认求最小值,那么需要分清哪些需要加负号;

4)求最大值等于加负号后求最小值。

clear;clc
c=[-3,1,1];
a=[1,-2,1;4,-1,-2];
b=[11,-3]';
aeq=[-2,0,1];
beq=1;
lb=zeros(3,1);
[x,fval]=linprog(c,a,b,aeq,beq,zeros(3,1))
z=-fval 

答案:x1=4,x2=1,x3=9,z=2

1.2、带有绝对值的线性规划求解

这种看似非线性的问题 可以转化成线性的问题进行求解:

clear;clc
c=[1,2,3,4];
aeq=[1,-1,-1,1;1,-1,1,-3;1,-1,-2,3];
beq=[0,1,-0.5]';
prob=optimproblem;
u=optimvar('u',4,'LowerBound',0);
v=optimvar('v',4,'LowerBound',0);
prob.Objective=sum(c*(u+v));
prob.Constraints.con=aeq*(u-v)== beq;
[sol,fval]=solve(prob)
x=sol.u-sol.v

答案:x1=0.25 x2=x3=0 x4=-0.25 z=1.25

这里补充一些MATLAB的基础知识:

1、prob=optimproblem 创建优化问题

2、

u=optimvar('u',4,'LowerBound',0);
v=optimvar('v',4,'LowerBound',0);

创建优化变量 其中参数意义如下:

‘u’:创建一个名为 u   的标量优化变量

‘4’:创建一个名为 u 的 4×1 优化变量向量,而且是列向量

'LowerBound':是指下界,因为u和v都是大于等于0的,详解看上面的图(UpperBound是上界)

后面接一个标量代表下界(上界为多少)

3、最后用solve函数进行求解,原书里面给的是输出四个参数,但是我这里为了简化,只输出两个参数:sol代表一个类(可能这样解释有误,但我是这么理解的),因为x=u-v,|x|=u+v,所以最后计算出答案,fval就是最优解。

1.3、单下标求解生产利润问题

1、目标函数正号的那一部分,是产品的利润和数量的乘积,利润是单价减去原料费。数量应该怎么表示很简单,举个例子:对于产品I必须要经过A1、A2、B1、B2、B3的过程,那么x1+x2就是数量,当然我这里都统一最后的工序的数量。并且有:x1+x2=x3+x4+x5和x6+x7=x8;

2、负号那一部分是计算单位时间的设备费用,这个费用等于满负荷时设备的费用与设备有效台时的比值,原本的分式我都化成小数了。

这里对目标函数进行化简得:

clear;clc
c=[0.25,0.2247,-0.625,-0.5524,-0.65,0.5,0.2889,-1.15,-0.6839];
a=zeros(5,9);
a(1,1)=5;
a(1,6)=10;
a(2,2)=7;
a(2,7)=9;
a(2,9)=12;
a(3,3)=6;
a(3,8)=8;
a(4,4)=4;
a(4,9)=11;
a(5,5)=7;
b=[6000,10000,4000,7000,4000]';
aeq=[1,1,-1,-1,-1,0,0,0,0;0,0,0,0,0,1,1,-1,0];
beq=[0;0];
lb=zeros(9,1);
[x,fval]=linprog(c,a,b,aeq,beq,lb)
fval=-fval

答案:x1=1200 x2=230 x3=0 x4=859 x5=571 x6=0 x7=500 x8=500 x9=324 z=1146.4142

1.4 、双下标求解利润问题

1)每种货物可以分布在一个或多个货舱内 以及 不同的货物可以放在一个货舱内 这里就说明了要使用双变量进行求解,即用i=1,2,3,4 分别表示货物 1 货物 2 货物 3 和货物 4 ;j=1,2,3 分别表示前船中舱和后舱。那么有设 xij(i=1,2,3,4;j=1,2,3)表示第i种货物装在第j个货舱内的质量;

2)接着我们需要表示题目给出的量:

wj和vj分别表示第j个货舱的重量限制和体积限制;j=1,2,3

ai,bi,ci分别表示货物规格中的重量、单位质量的空间和利润;i=1,2,3,4

3)这里有一个很细节的点:“三个货舱所能装载的货物的重量必须与其最大的容许量成比例”

这句话的意思就是说我们放在某一个货舱内货物重量与其货舱的最大容积的比值是一个常数,这个常数满足三个货舱。

这里我们可以这样理解:以货物为研究对象,而不是货舱,因为货物可以放在不同的货舱内。举个例子:c1就是货物一的单价,乘上货物一在三个舱里的质量总和

接着我们需要考虑如下约束对象:

1)所放货物总质量不能超过货舱质量限制;(货舱为研究对象)

2)所放货物的空间不能超过货舱的体积限制;(货舱为研究对象)

3)所放货物的总质量不能超过现有货物的总质量;(货物为研究对象)

4)三个货舱所能装载的货物的重量必须与其最大的容许量成比例;(货舱为研究对象)

5)货物质量一定为非负数。

写到这里就有一点感悟啦!对于找约束条件,约束的主体一定是我们构造的决策变量xij,这也就是为什么有3)的约束,而没有对自身体积的约束(因为xij表示质量)

因为把双下标的决策变量转化成单下标的变量很麻烦,所以我选择创建优化问题:

clear;clc
a=[18,15,23,12]';% 货物质量
b=[4800,650,580,390];% 单位质量的空间
c=[3100,3800,3500,2850];% 利润
w=[10,16,8];% 质量限制
v=[6800,8700,5300]';% 体积限制
prob=optimproblem('ObjectiveSense','max');% 创建优化问题
x=optimvar('x',4,3,'LowerBound',0);% 创建4X3的优化问题
prob.Objective=c*sum(x,2);% 目标函数 xi1到xi3 是对行求和
% 这样计算的是1X4的行向量c乘上对x行求和后的4X1的列向量得出一个数:利润
con1=sum(x,1)<=w;
con2=(b*x)'<=v;% 1X4 * 4X3 =1X3 对矩阵乘法的基础有要求哇
con3=sum(x,2)<=a;
con4=[sum(x(:,1))/10==sum(x(:,2))/16;sum(x(:,2))/16==sum(x(:,3))/8];
prob.Constraints.con1=con1;
prob.Constraints.con2=con2;
prob.Constraints.con3=con3;
prob.Constraints.con4=con4;
[sol,fval]= solve (prob)% fval 121515元
sum(sol.x,2)% 第i行代表货物i,第j列代表货舱j,计算货物i的总质量需要把分散在各个货舱的质量都求和

答案:四种货物的质量(吨)分别为:0 15 15.9474 3.0526 总利润(元):1.2152+e5

最后给出一些基础帮助的链接:

求和函数sum

优化问题OptimizationProblem

优化变量optimvar

司守奎《数学建模算法与应用》课后习题:线性规划相关推荐

  1. 数学建模算法与应用学习day1——线性规划问题整数规划问题

    以下内容来自司守奎编写的数学建模算法与应用学习,主要是记录自己的学习历程,转载还请标明出处! 一.线性规划 知识点 1.1线性规划问题 1.1.2线性规划解的概念 f = [-2 ; -3 ; 5]; ...

  2. 数学建模算法之优化模型【线性规划问题、非线性规划问题、整数规划问题、二次规划问题】

    1. 线性规划问题(LP) 线性规划问题是要最小化或最大化一个受限于一组有限的线性约束的线性函数. Matlab 中规定线性规划的标准形式为 第一个式子为目标函数,s.t. 式是约束条件.其中 c 和 ...

  3. python dendrogram_【聚类分析】《数学建模算法与应用》第十章 多元分析 第一节 聚类分析 python实现...

    第十章 多元分析 第一节 聚类分析 介绍 这里是司守奎教授的<数学建模算法与应用>全书案例代码python实现,欢迎加入此项目将其案例代码用python实现 GitHub项目地址:Math ...

  4. 非线性规划转化为线性规划问题(司守奎老师数模例题)-------数模学习笔记一

    目录 一.非线性问题 1.问题描述与分析 2.问题解决思路 二.具体求解步骤 1.引入ui与vi变量 2.引入变量后新方程 3.matlab程序 总结 本文主要记录司守奎数模书中第一章所给例题 提示: ...

  5. LL1分析构造法_数学建模算法--最优赋权法(含代码)

    数学建模算法--最优赋权法(含代码) 作者:郑铿城 本次介绍数学建模和科研写作的方法--最优赋权法最优赋权法经常用于分析评价类问题,从该算法的名称就可以看到,该算法首先要体现"最优" ...

  6. 数学建模算法:支持向量机_从零开始的算法:支持向量机

    数学建模算法:支持向量机 从零开始的算法 (Algorithms From Scratch) A popular algorithm that is capable of performing lin ...

  7. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  8. c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

    1.埃尔米特(Hermite)插值 1.1.Hermite插值多项式 如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶.二阶甚至更高阶的导数值,这就是 Hermite 插值问 ...

  9. 数学建模算法与应用:预测模型(3)案例: SARS 疫情对经济指标影响

    目录 问题描述: 一.建模思路 二.对模型进行分析预测 2.1.对模型进行假设 三.建立灰色预测模型GM(1,1) 3.1.模型的求解(i)商品零售额 3.2.用MATLAB程序,实现(i)商品零售额 ...

最新文章

  1. Firefox下http协议监测工具LiveHttpHeaders
  2. 创建了联合索引还用在单个字段上创建索引吗_数据库 索引并不是万能的
  3. matlab清理程序onCleanup
  4. ArgoCD + KubeVela:以开发者为中心的 GitOps
  5. for循环中new的对象什么时候被回收_你真的了解JS里的 new 吗?
  6. Tensorflow载入模型详解,方法一(基础版):针对测试模型性能 和 使用模型。
  7. 使用redis做为MySQL的缓存
  8. 【转载】他是个残疾人 mynote V1.01发布
  9. 科技公司 CEO 合谋“诈骗”自家公司超 900 万美元,现已被捕
  10. VMware新建虚拟机
  11. 关于MultiActionController异步Ajax,post;
  12. Unbuntu 出现无法解析或打开软件包的列表或是状态文件的解决办法
  13. 幼儿园编程机器人课程介绍
  14. html代码学习离线文档,新手学HTML代码的简易方法
  15. thinkphp 模板写php,thinkphp 模版继承的使用
  16. python exec 函数_Python之浅谈exec函数
  17. C++ Class6-虚函数-虚析构-多态-纯虚函数-抽象类-静态联编和动态联编-多态小练习(英雄联盟)
  18. python获取word页数_用程序获取word页码方法汇总
  19. python阴阳师脚本_阴阳师肝不动了,试试Python吧
  20. tcp协议一定要有服务器吗,复习TCP协议——看这篇就够了

热门文章

  1. C C++ 调用第三方DLL库失败 LoadLibrary 返回NULL 并报 126 错误 解决办法
  2. 2016 KCon 黑客大会兵器谱
  3. 计算机哈利波特音乐,【拼装延时】LEGO乐高 哈利波特系列 75954 霍格沃茨大礼堂...
  4. 以管理为轴心 为IT服务保驾护航——北京赛特百货有限公司
  5. Python免费的家庭视频监控系统(1)
  6. 关于差分隐私的一些基本概念的整理
  7. c语言sqlserver数据库头文件,Mysql的C语言API进行数据库编程
  8. 个性签名代码(花了1个多小时从网上搜集以及整理)
  9. 华为eNSP路由器报错误代码:40,41的问题解决办法。路由器启动无限###。eNSP安装。
  10. 弱网测试工具-qnet