经典优化算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
产品 单位产品消耗定额 材料与设备
甲/件 乙/件 现在材料与设备能力
钢材/kg
8
5
3500
铁材/kg
设备能力/台时 单位产品的利润/元
6
4 80
4
5 125
1800
2800 ---
线性规划-MATLAB实现
数学模型为 max ������(������) = 80������1 + 125������2 8������1 + 5������2 ≤ 3500 6������1 + 4������2 ≤ 1800 s. t. 4������1 + 5������2 ≤ 2800 ������1 , ������2 ≥ 0
说求解0-1整数规划只要在求解整数规划
的基础上加上对变量最小约束为0,最大 值约束为1就行了。
0-1整数规划-Matlab实现
过时语句 bintprog
f=[7 5 9 6 3];
A=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];
b=[100;4;-2];
[x,fval,flag]=bintprog(f,A,b)
[x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options
整数规划
例
整数规划-Matlab实现
f=[7 5 9 6 3]; ic=[1,2,3,4,5]; b=[100;4;-2]; !5个变量全要求是整数 A=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];
线性规划-MATLAB实现
转换成linprog的最小格式 min ������ ������ = −80������1 − 125������2 8������1 + 5������2 ≤ 3500 6������1 + 4������2 ≤ 1800 s. t. 4������1 + 5������2 ≤ 2800 ������1 , ������2 ≥ 0
! 限制最大值为1
[x,fval,flag]=intlinprog(f,ic,A,b,[],[],lb,ub)
0-1整数规划-Matlab实现
x=0
0
0 0 1 fval = 3 flag = 1
0-1整数规划-Matlab实现
与整数规划不同的地方只有一个,就是
多了lb=zeros(5,1),ub=ones(5,1),也就是
优化算法分类
离散优化(discreted optimization)
或组合优化(combinational optimization)
整数规划(Integer programming IP) 0-1整数规划(zeor-one programming) 3. 目标个数? 单目标规划,多目标规划 4. 参数/变量确定性? 确定性规划,不确定性规划
混合规划-MATLAB实现
没有专门的语句,是不是可以用前边的
intlinprog变化一下实现呢?
答案: 不能,结果不会对,找专门的工具箱或 者用Lingo,1stopt来解决,MATLAB在混合整 数规划上目前还很难。
整数规划-Lingo实现
MODEL: MIN = 7 * X1 + 5 * X2 + 9 * X3 + 6 * X4 + 3 * X5; 56 * X1 + 20 * X2 + 54 * X3 + 42 * X4 + 15 * X5 <= 100; X1 + 4 * X2 + X3 <= 4; X1 + 2 * X2 + X4 + 2 * X5 >= 2; END @BND(-110,X1,110); @BND(-210,X2,210); @BND(-310,X3,310); @BND(-330,X4,330); @BND(-560,X5,560);
优化算法分类
5. 问题求解特性? 目标规划 动态规划 多层规划 网络优化
……
6. 问题解决方法 经典/传统优化,现代/智能优化
线性规划
MATLAB
工具箱
命令行 编程
线性规划
标准型 max ������ = ������1 ������1 + ������2 ������2 + ⋯ ������������ ������������ ������11 ������1 + ������12 ������2 + ⋯ ������1������ ������������ = ������1 ������21 ������1 + ������22 ������2 + ⋯ ������2������ ������������ = ������2 ⋮ s. t. ������������1 ������1 + ������������2 ������2 + ⋯ ������������������ ������������ = ������������ ������������ ≥ 0, ������ = 1,2, ⋯ ������
[_4] 4 * X1 + 5 * X2 <= 2800;
[_5] X1 >= 0;
[_6] X2 >= 0;
END
线性规划-1stOpt实现
Parameter x, y;
MinFunction cos(x^2-2*y)+exp(-x^2)*sin(y);
-x+(y-2)^2>=0; x-2*y+1>=0; 结果为数学最优,不符合物理意义
线性规划-MATLAB实现
函数调用
[x,fval,exitflag]=linprog(f,A,b) [x,fval,exitflag]=linprog(f,A,b,Aeq,beq) [x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb,ub) [x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb,ub,x0)
4. 内点法 5. ……
工具求解
Matlab语法
f=[3 6]; A=[-1 0; 0 -1; 1 2; -1 0; 0 -1];
b=[-4; -3; 10; 0; 0];
[x,fval]=linprog(f,A,b) 解:x = 4.0000 3.0000 fval = 30.0000
工具求解
线性规划-MATLAB实现
clear all; f=[-80,-125]; A=[8 5; 6 4; 4 5]; b=[3500,1800,2800];
lb=[0;0];
ub=[inf;inf]; [x,fval,exitflag,output]=linprog(f,A,b,[],[],lb)
线性规划-MATLAB实现
algorithm: ‘dual-simplex’
firstorderopt: 7.1054e-12
! 对偶单纯形法
线性规划-MATLAB实现
1. 命令: optimtool 2. APPS (应用程序)→ Optimization
线性规划-MATLAB实现
参考帮助
1. www.mathworks.com 2. www.baidu.com 3. Optimization Tool 下 help →
[x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq)
[x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub) [x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0) 与linprog的区别有两点 1. 关键词变intlinprog, 2. 多了一个整型参数设置关键词intcon
Optimal solution found. x= 0 450.0000 fval = -5.6250e+04 exitflag = 1 output = struct with fields: iterations: 2 constrviolation: 0 message: 'Optimal solution found.'
lb=[-110,-210,-310,-330,-560]
ub=[110,210,310,330,560]
! 下边界
! 上边界
[x,fval,flag]=intlinprog(f,ic,A,b,[],[],lb,ub)
整数规划-Matlab实现
x = -110.0000
-210.0000 -310.0000 -330.0000 431.0000 fval = -5297 flag = 1
0-1整数规划-Matlab实现
例
0-1整数规划-Matlab实现
f=[7 5 9 6 3];
ic=[1,2,3,4,5]; A=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];
b=[100;4;-2];
lb=zeros(5,1); ! 限制最小值为0
ub=ones(5,1);
线性规划-MATLAB实现
标准型的矩阵表达 min ������ = ������T ������ ������������ ≤ ������ s. t. ൞������������������ ������ = ������������������ ������������ ≤ ������ ≤ ������������
Show Quick Reference
4. help linprog # 具体算法
5. Qucik Reference
6. 工具书
线性规划-Lingo实现
MODEL: [_1] MAX= 80 * X1 + 125 * X2; [_2] 5 * X1 + 5 * X2 <= 3500;
[_3] 6 * X1 + 4 * X2 <= 1800;
2. 决策变量是否连续? 数学规划(mathematical programming) 或连续优化(continuous optimization) 线性规划(linear programming LP) 非线性规划(nonlinear programming NLP) 二次规划(quadratic programming QP)
[x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
options由optimset设置参数,exitflag取值从 -7到1
线性规划-MATLAB实现
例. 某工厂计划生产甲、乙两种产品,主要材料有钢材 3500kg,铁材1800kg、专用设备能力2800台时,材料与 设备能力的消耗定额及单位产品所获利润如表所示, 如何安排生产才能使该厂所获利润最大?
线性规划
标准型的矩阵表达
min ������ = ������T ������ ������������ ≤ ������ s. t. ቊ ������ ≥ 0
������ = ������������������
������������
为约束矩阵
������ ������1 , ������2 ⋯ ������������ T 为目标函数系数矩阵 ������ ������1 , ������2 ⋯ ������������ T 资源系数向量 ������ ������1 , ������2 ⋯ ������������ T 决策向量
x2>=0
end
ຫໍສະໝຸດ Baidu
[_6] X2 >= 0;
END
工具求解
1stOpt语法
Parameters x1,x2; Minfunction 3*x1+6*x2; x1+2*x2<=10;
x1>=4;
x2>=3;
优化算法分类
1. 有无约束条件?
约束(constrained)、无约束(unconstrained)
优化算法与实现
实例
例:小王想购买两种水果,苹果和桔
子。其中桔子3元一斤,苹果6元一斤 ,小王最少想买4个桔子,3个苹果,
他要求苹果个数是桔子的两倍,且两
种水果个数总和小于10,为了省钱,
小王如何做最合算?
数学模型
决策变量? 目标函数? 约束条件?
可行域?
求解方法
1. 图解法
2. 单纯形法
3. 多项式时间算法(椭球算法)
Lindo语法
min 3x1+6x2
Lingo语法
MODEL:
ST
x1>=4 x2>=3 x1+2x2<=10 x1>=0
[_1] MIN= 3 * X1 + 6 * X2;
[_2] X1 >= 4; [_3] X2 >= 3; [_4] X1 + 2 * X2 <= 10; [_5] X1 >= 0;
Parameter x1[0,], x2[0,];
MaxFunction 80*x1+125*x2;
8*x1+ 5*x2<=3500;
6*x1+4*x2<=1800;
4*x1+5*x2<=2800;
修改参数范围为正
整数规划-Matlab实现
函数调用
[x,fval,exitflag]=intlinprog(f,intcon,A,b)
甲/件 乙/件 现在材料与设备能力
钢材/kg
8
5
3500
铁材/kg
设备能力/台时 单位产品的利润/元
6
4 80
4
5 125
1800
2800 ---
线性规划-MATLAB实现
数学模型为 max ������(������) = 80������1 + 125������2 8������1 + 5������2 ≤ 3500 6������1 + 4������2 ≤ 1800 s. t. 4������1 + 5������2 ≤ 2800 ������1 , ������2 ≥ 0
说求解0-1整数规划只要在求解整数规划
的基础上加上对变量最小约束为0,最大 值约束为1就行了。
0-1整数规划-Matlab实现
过时语句 bintprog
f=[7 5 9 6 3];
A=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];
b=[100;4;-2];
[x,fval,flag]=bintprog(f,A,b)
[x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options
整数规划
例
整数规划-Matlab实现
f=[7 5 9 6 3]; ic=[1,2,3,4,5]; b=[100;4;-2]; !5个变量全要求是整数 A=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];
线性规划-MATLAB实现
转换成linprog的最小格式 min ������ ������ = −80������1 − 125������2 8������1 + 5������2 ≤ 3500 6������1 + 4������2 ≤ 1800 s. t. 4������1 + 5������2 ≤ 2800 ������1 , ������2 ≥ 0
! 限制最大值为1
[x,fval,flag]=intlinprog(f,ic,A,b,[],[],lb,ub)
0-1整数规划-Matlab实现
x=0
0
0 0 1 fval = 3 flag = 1
0-1整数规划-Matlab实现
与整数规划不同的地方只有一个,就是
多了lb=zeros(5,1),ub=ones(5,1),也就是
优化算法分类
离散优化(discreted optimization)
或组合优化(combinational optimization)
整数规划(Integer programming IP) 0-1整数规划(zeor-one programming) 3. 目标个数? 单目标规划,多目标规划 4. 参数/变量确定性? 确定性规划,不确定性规划
混合规划-MATLAB实现
没有专门的语句,是不是可以用前边的
intlinprog变化一下实现呢?
答案: 不能,结果不会对,找专门的工具箱或 者用Lingo,1stopt来解决,MATLAB在混合整 数规划上目前还很难。
整数规划-Lingo实现
MODEL: MIN = 7 * X1 + 5 * X2 + 9 * X3 + 6 * X4 + 3 * X5; 56 * X1 + 20 * X2 + 54 * X3 + 42 * X4 + 15 * X5 <= 100; X1 + 4 * X2 + X3 <= 4; X1 + 2 * X2 + X4 + 2 * X5 >= 2; END @BND(-110,X1,110); @BND(-210,X2,210); @BND(-310,X3,310); @BND(-330,X4,330); @BND(-560,X5,560);
优化算法分类
5. 问题求解特性? 目标规划 动态规划 多层规划 网络优化
……
6. 问题解决方法 经典/传统优化,现代/智能优化
线性规划
MATLAB
工具箱
命令行 编程
线性规划
标准型 max ������ = ������1 ������1 + ������2 ������2 + ⋯ ������������ ������������ ������11 ������1 + ������12 ������2 + ⋯ ������1������ ������������ = ������1 ������21 ������1 + ������22 ������2 + ⋯ ������2������ ������������ = ������2 ⋮ s. t. ������������1 ������1 + ������������2 ������2 + ⋯ ������������������ ������������ = ������������ ������������ ≥ 0, ������ = 1,2, ⋯ ������
[_4] 4 * X1 + 5 * X2 <= 2800;
[_5] X1 >= 0;
[_6] X2 >= 0;
END
线性规划-1stOpt实现
Parameter x, y;
MinFunction cos(x^2-2*y)+exp(-x^2)*sin(y);
-x+(y-2)^2>=0; x-2*y+1>=0; 结果为数学最优,不符合物理意义
线性规划-MATLAB实现
函数调用
[x,fval,exitflag]=linprog(f,A,b) [x,fval,exitflag]=linprog(f,A,b,Aeq,beq) [x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb,ub) [x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb,ub,x0)
4. 内点法 5. ……
工具求解
Matlab语法
f=[3 6]; A=[-1 0; 0 -1; 1 2; -1 0; 0 -1];
b=[-4; -3; 10; 0; 0];
[x,fval]=linprog(f,A,b) 解:x = 4.0000 3.0000 fval = 30.0000
工具求解
线性规划-MATLAB实现
clear all; f=[-80,-125]; A=[8 5; 6 4; 4 5]; b=[3500,1800,2800];
lb=[0;0];
ub=[inf;inf]; [x,fval,exitflag,output]=linprog(f,A,b,[],[],lb)
线性规划-MATLAB实现
algorithm: ‘dual-simplex’
firstorderopt: 7.1054e-12
! 对偶单纯形法
线性规划-MATLAB实现
1. 命令: optimtool 2. APPS (应用程序)→ Optimization
线性规划-MATLAB实现
参考帮助
1. www.mathworks.com 2. www.baidu.com 3. Optimization Tool 下 help →
[x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq)
[x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub) [x,fval,exitflag]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0) 与linprog的区别有两点 1. 关键词变intlinprog, 2. 多了一个整型参数设置关键词intcon
Optimal solution found. x= 0 450.0000 fval = -5.6250e+04 exitflag = 1 output = struct with fields: iterations: 2 constrviolation: 0 message: 'Optimal solution found.'
lb=[-110,-210,-310,-330,-560]
ub=[110,210,310,330,560]
! 下边界
! 上边界
[x,fval,flag]=intlinprog(f,ic,A,b,[],[],lb,ub)
整数规划-Matlab实现
x = -110.0000
-210.0000 -310.0000 -330.0000 431.0000 fval = -5297 flag = 1
0-1整数规划-Matlab实现
例
0-1整数规划-Matlab实现
f=[7 5 9 6 3];
ic=[1,2,3,4,5]; A=[56,20,54,42,15;1,4,1,0,0;-1,-2,0,-1,-2];
b=[100;4;-2];
lb=zeros(5,1); ! 限制最小值为0
ub=ones(5,1);
线性规划-MATLAB实现
标准型的矩阵表达 min ������ = ������T ������ ������������ ≤ ������ s. t. ൞������������������ ������ = ������������������ ������������ ≤ ������ ≤ ������������
Show Quick Reference
4. help linprog # 具体算法
5. Qucik Reference
6. 工具书
线性规划-Lingo实现
MODEL: [_1] MAX= 80 * X1 + 125 * X2; [_2] 5 * X1 + 5 * X2 <= 3500;
[_3] 6 * X1 + 4 * X2 <= 1800;
2. 决策变量是否连续? 数学规划(mathematical programming) 或连续优化(continuous optimization) 线性规划(linear programming LP) 非线性规划(nonlinear programming NLP) 二次规划(quadratic programming QP)
[x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
options由optimset设置参数,exitflag取值从 -7到1
线性规划-MATLAB实现
例. 某工厂计划生产甲、乙两种产品,主要材料有钢材 3500kg,铁材1800kg、专用设备能力2800台时,材料与 设备能力的消耗定额及单位产品所获利润如表所示, 如何安排生产才能使该厂所获利润最大?
线性规划
标准型的矩阵表达
min ������ = ������T ������ ������������ ≤ ������ s. t. ቊ ������ ≥ 0
������ = ������������������
������������
为约束矩阵
������ ������1 , ������2 ⋯ ������������ T 为目标函数系数矩阵 ������ ������1 , ������2 ⋯ ������������ T 资源系数向量 ������ ������1 , ������2 ⋯ ������������ T 决策向量
x2>=0
end
ຫໍສະໝຸດ Baidu
[_6] X2 >= 0;
END
工具求解
1stOpt语法
Parameters x1,x2; Minfunction 3*x1+6*x2; x1+2*x2<=10;
x1>=4;
x2>=3;
优化算法分类
1. 有无约束条件?
约束(constrained)、无约束(unconstrained)
优化算法与实现
实例
例:小王想购买两种水果,苹果和桔
子。其中桔子3元一斤,苹果6元一斤 ,小王最少想买4个桔子,3个苹果,
他要求苹果个数是桔子的两倍,且两
种水果个数总和小于10,为了省钱,
小王如何做最合算?
数学模型
决策变量? 目标函数? 约束条件?
可行域?
求解方法
1. 图解法
2. 单纯形法
3. 多项式时间算法(椭球算法)
Lindo语法
min 3x1+6x2
Lingo语法
MODEL:
ST
x1>=4 x2>=3 x1+2x2<=10 x1>=0
[_1] MIN= 3 * X1 + 6 * X2;
[_2] X1 >= 4; [_3] X2 >= 3; [_4] X1 + 2 * X2 <= 10; [_5] X1 >= 0;
Parameter x1[0,], x2[0,];
MaxFunction 80*x1+125*x2;
8*x1+ 5*x2<=3500;
6*x1+4*x2<=1800;
4*x1+5*x2<=2800;
修改参数范围为正
整数规划-Matlab实现
函数调用
[x,fval,exitflag]=intlinprog(f,intcon,A,b)