源自司守奎老师《数学建模算法与应用》以及数学建模清风老师数学规划模型总结(侵删)
数学规划是运筹学的一个分支,用来研究:在给定的条件下(约束条件),如何按照某一衡量标准(目标函数)来寻求计划,管理工作的最优方案。(求目标函数在一定约束条件下的极值问题)
可以结合司守奎老师的书籍一起看
规划分为:线性规划、非线性规划(司守奎老师引例)
引用、参考这位老哥的链接
matlab中
[x fval] = linprog(c, A, b, Aeq, beq, lb)
可以求出规划最小值min
Aeq与Beq:看图@3.4点
Aeq和Beq会同时出现,表示等式时候的矩阵值(限定条件更加严格)
基础部分讲解完成:实践1:
c = [-5 -4 -6]'; % 加单引号表示转置
% c = [-5 -4 -6]; % 写成行向量也是可以的,不过不推荐,我们按照标准型来写看起来比较正规
A = [1 -1 1;
3 2 4;
3 2 0];
b = [20 42 30]';
lb = [0 0 0]';
[x fval] = linprog(c, A, b, [], [], lb) % ub我们直接不写,则意味着没有上界的约束
% x =
% 0
% 15.0000
% 3.0000
%
% fval =
% -78
X123都是下届0,上界无穷;凡是出现13的矩阵 转置为31的列向量
解出此区间内fval值为-78
例2.
c = [0.04 0.15 0.1 0.125]';
A = [-0.03 -0.3 0 -0.15;
0.14 0 0 0.07];
b = [-32 42]';
Aeq = [0.05 0 0.2 0.1];
beq = 24;
lb = [0 0 0 0]';
[x fval] = linprog(c, A, b, Aeq, beq, lb)
% x =
% 0
% 106.6667
% 120.0000
% 0
%
% fval =
% 28
你看前面例子A矩阵中所有都是小于0为边界条件,而这个方程中第一行A大于0为边界条件了,这次我们把第一行全添加负号就行了
matlab默认都是解小于号,所以求max都反其道而行之,求相反数的最小值
min (-z)=-2x1-3x2+5x3
系数矩阵不变,只变大于号的
c = [-2 -3 5]';
A = [-2 5 -1;
1 3 1];
b = [-10 12];
Aeq = ones(1,3);
beq = 7;
lb = zeros(3,1);
[x fval] = linprog(c, A, b, Aeq, beq, lb)
fval = -fval % 注意这个fval要取负号(原来是求最大值,我们添加负号变成了最小值问题)
% x =
% 6.4286
% 0.5714
% 0
% fval =
% -14.5714
% fval =
% 14.5714
本期文件分享:
【金山文档】 【课本】司守奎 《数学建模算法与应用》 第二版
https://kdocs.cn/l/chkDpfLgMMea
【金山文档】 1第一章 线性规划
https://kdocs.cn/l/ctxR3T2hiAdV
【金山文档】 1第一章 线性规划
https://kdocs.cn/l/ctxR3T2hiAdV