Constraint-Optimization
本文最后更新于:2023年6月19日 晚上
约束优化
matlab 有几种命令可以求解
linprog
求一次线性规划quadprog
求二次规划问题
书上的方法是将二次规划问题改写成极小化标准形式,获得二次型黑塞矩阵(我没看懂),留一个坑
黑塞矩阵:是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。
一些概念重温
黑塞矩阵说白了应该就是对每个变量分别求两次偏导得到的对称正定矩阵。
linprog
语法
x = linprog(f,A,b)``x = linprog(f,A,b,Aeq,beq)``x = linprog(f,A,b,Aeq,beq,lb,ub)``x = linprog(f,A,b,Aeq,beq,lb,ub,options)``x = linprog(problem)``[x,fval] = linprog(___)``[x,fval,exitflag,output] = linprog(___)``[x,fval,exitflag,output,lambda] = linprog(___)
详细描述
生产销售规划
%可以直接把系数及约束条件都直接用矩阵表示而不是再写一个函数
c = [12 8 22-1.5/0.8 16-1.5/0.75];
A = [1/3 1/4 1/2.4 1/3;4 2 6/0.8 16/3;1 0 1/0.8 0];
b = [50;480;100];
v1 = [0,0,0,0];
[x,fval] = linprog(-c,A,b,[],[],v1);
对应的式子就不写了…不过在设变量的时候尽量设多一点,否则有些量之间存在因果关系的在约束的时候有可能考虑不周。
灵敏度分析,则 LINGO 还会输出以下结果:
1 |
|
以上显示的是当前最优基(矩阵)保持不变的充分条件(RANGES IN WHICH THE BASIS IS UNCHANGED),包括目标函数中决策变量应的系数的变化范围(OBJ COEFFICIENT RANGES)和约束的右端项的变化范围(RIGHTHAND SIDE RANGES)两部分。
前一部分的输出行X1 72.000000 24.000000 8.000000
表示决策变量 X1 当前在目标函数中对应的系数为 72,允许增加 24 和减少 8。也就是说,当该系数在区间[64,96]上变化时(假设其它条件均不变),当前最优基矩阵保持不变。对 X2 对应的输出行也可以类似地解释。由于此时约束没有任何改变,所以最优基矩阵保持不变意味着最优解不变(当然,由于目标函数中的系数发生变化,最优值还是会变的)。
后一部分的输出行X2 50.000000 10.000000 6.666667
表示约束 2 当前右端项为 50,允许增加 10 和减少 6.666667。也就是说,当该系数在区间[43.333333,60]上变化时(假设其它条件均不变),当前最优基矩阵保持不变。对约束 3、约束 4 对应的输出行也可以类似地解释。由于此时约束已经改变,虽然最优基矩阵保持不变,最优解和最优值还是会变的。但是,由于最优基矩阵保持不变,所以前面的“DUAL PRICES”给出的约束的影子价格此时仍然是有效的。
题目的后几问是更细致的投资问题,答案使用了 Lagrange 乘子,这里我并不了解,先挖一个坑
quadprog
语法
x = quadprog(H,f)``x = quadprog(H,f,A,b)``x = quadprog(H,f,A,b,Aeq,beq)``x = quadprog(H,f,A,b,Aeq,beq,lb,ub)``x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
H 是目标函数 Hesse 矩阵
f 是目标函数线性项系数列向量 (线性项即单变量一次项)
A 是不等式约束系数矩阵(不等式都要化成左边 x 项常数)
b 是不等式约束列向量
Aeq 是等式约束系数矩阵,如
beq 是等式约束列向量
lb 是 Lower bounds, specified as a real vector or real array. If the number of elements in x0 is equal to the number of elements in lb, then lb specifies that for all i.即下界列向量
ub 是上界列向量
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)``x = quadprog(problem)``[x,fval] = quadprog(___)``[x,fval,exitflag,output] = quadprog(___)``[x,fval,exitflag,output,lambda] = quadprog(___)
实战–水库供水–Lingo 初探
1 |
|
实战 2–圈地模型
果然 lingo 求解多变量线性规划简单。
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!