生产实践中,经常会遇到很多资源分配的问题,如何分配各种资源以获得最大经济效益,这就形成了运筹学的一个分支——数学规划。
离散系统的优化问题一般都用规划模型求解
而matlab提供了很多强大的规划问题求解命令,使得求解非常简单
目标函数和约束条件均为线性的最优化问题。约束为线性等式Or不等式
线性规划问题的通用的求解方法:单纯形法(由美国数学家,线性规划之父:George Bernard Dantzig(1914-2005)于1947年提出),正是这个单纯形为线性规划的整个学科打下了基础。
总之现在线性规划问题非常好求解,就用单纯形,MATLAB的linprog就是用的单纯形。
分支:整数线性规划Iinteger Linear Programing(全部决策变量都必须取整数值)
1947年J.von诺依曼提出了对偶理论,开创了线性规划的新领域, 他在1946年提出经典的计算机体系架构(程序和数据一样存储起来),世界上第一台计算机ENIAC也是他参与设计的。
“对偶”不是“等价”
“对偶”不是“等价”
“对偶”不是“等价”
具体定义
不等式方向相反,即原问题的约束不等式是大于等于则对偶问题的对应条件则是小于等于
优化方向相反,即原问题max对偶问题就是min
行约束是变量范围的约束条件,如 x ≥ 0 x\geq0 x≥0,这种条件不变号
上面的定义看起来仍然很迷,尤其说啥行列转置······但下面这几个性质就能让我们明白对偶问题想干啥了
第二点,原问题是最大化问题,对偶是最小化问题,而原问题的任意可行解小于对偶问题的任意可行解, 这不就说明对偶问题的下界就是原问题的上界麽,这和第四点呼应了,当两个可行解相遇(相等)时,就是原问题和对偶问题的最优解。
类似于这么个意思,仅供理解大致思想,不准确不严谨的地方请忽略
由于现在的计算机可以处理有成千上万的约束和决策变量的规划问题, 所以线性规划已经是现代管理中常用的基本方法了。
这几个线性规划的例子除了是变量多了一些以外,都类似于初中数学最基本的练习题(一般只有俩变量,便于在二维坐标系画图手动求解),都上不了期末考试台面的那种
c=[2;3;1];
a=[1 4 2;3 2 0];
b=[8;6];
[x,fval]=linprog(c,-a,-b,[],[],zeros(3,1));
% x向量是使得目标函数取得最小值的那组决策变量
% fval是最小值
% [],[]是等式约束,本问题中没有
% zeros(3,1)是x向量的下限,是第三个约束条件
% 初始值和控制变量参数没写
x =
0.8066
1.7900
0.0166
>> fval
fval =
7.0000
就这么一点点代码!!so easy有没有,比自己手算快多了,正在上初中的朋友们应该学习一下
c=[-5;-4;-6];
a=[1 -1 1;3 2 4;3 2 0];
b=[20;42;30];
[x,fval,exitflag,output,lambda]=linprog(c,a,b,[],[],zeros(3,1))
% exitflag是收敛标志,取1则问题收敛
% output可以显示迭代总次数和使用的算法等
% lambda是问题求解中用到的拉格朗日乘子
警告: Your current settings will run a different algorithm ('dual-simplex') in a
future release.
> In linprog (line 204)
In me_test (line 6)
Optimization terminated.
x =
0.0000
15.0000
3.0000
fval =
-78.0000
exitflag =
1
output =
包含以下字段的 struct:
iterations: 6
algorithm: 'interior-point-legacy'
cgiterations: 0
message: 'Optimization terminated.'
constrviolation: 0
firstorderopt: 5.8704e-10
lambda =
包含以下字段的 struct:
ineqlin: [3×1 double]
eqlin: [0×1 double]
upper: [3×1 double]
lower: [3×1 double]
>>
help linprog
1 linprog converged to a solution X.
0 Maximum number of iterations reached.
-2 No feasible point found.
-3 Problem is unbounded.
-4 NaN value encountered during execution of algorithm.
-5 Both primal and dual problems are infeasible.
-7 Magnitude of search direction became too small; no further
progress can be made. The problem is ill-posed or badly
conditioned.
不明白拉格朗日乘子可以参看我的这篇博客和我的另一篇博客
c=[2;3;-5];
a=[2 -5 1];
b=10;
aeq=[1 1 1];
beq=7;
% 注意matlab标准形式
[x,fval,exitflag,output,lambda]=linprog(-c,-a,-b,aeq,beq,zeros(3,1))
警告: Your current settings will run a different algorithm ('dual-simplex') in a
future release.
> In linprog (line 204)
In me_test (line 8)
Optimization terminated.
x =
6.4286
0.5714
0.0000
fval =
-14.5714
exitflag =
1
output =
包含以下字段的 struct:
iterations: 6
algorithm: 'interior-point-legacy'
cgiterations: 0
message: 'Optimization terminated.'
constrviolation: 1.5099e-14
firstorderopt: 8.5009e-12
lambda =
包含以下字段的 struct:
ineqlin: 0.1429
eqlin: 2.2857
upper: [3×1 double]
lower: [3×1 double]
只要目标函数和约束条件包含非线性函数,就是非线性规划
求解非线性规划比线性规划难很多很多很多,没有适用于各类问题的通用方法,(线性规划的单纯形就是通用解法)