解決優化問題的兩種方法:
(1)基于問題的優化方法
(2)基于求解器的優化方法
工具背景梳理
Optimization Toolbox適用的問題類型線性規劃 (LP)、混合整數線性規劃 (MILP)、二次規劃 (QP)、二階錐規劃 (SOCP)、非線性規劃 (NLP)、約束線性最小二乘、非線性最小二乘和非線性方程。
(一)基于問題的求解方法
1.特征
(1)以符號形式表示目標和約束
(2)需要從問題形式轉換為矩陣形式,從而導致更長的求解時間
(3)在很多情況下自動計算和使用目標和非線性約束函數的梯度,但不計算 Hessian 矩陣
2.例程
(1)基本線性示例
目標:以最少的花費購買到符合標準的材料
步驟
a.表示相關變量
b.表示目標函數和成本函數
c.調用solve求解器
clc all
;
%混合整數的線性規劃問題
%ingots表示購買鋼錠情況,Alloy表示購買廢鋼情況,Scrap表示某種等級的廢鋼
% 問題的準備階段
steelprob
= optimproblem
;
ingots
= optimvar
('ingots',4,
'Type',
'Type',
'integer',
'LowerBound',0,
'UpperBound',
'1');
alloys
= optimvar
('alloys',3,
'LowerBound',0
);
scrap
= optimvar
('scrap',
'LowerBound',0
);%成本變量相關聯的成本表示
%.*在Matlab中表示對應元素相乘
weightIngots
= [5,3,4,6
];
costIngots
= weightIngots.*
[350,330,310,280
];
costAlloys
= [500,450,400
];
costScrap
= 100;
cost
= costIngots*ingots+costAlloys*alloys+costScrap*scrap
;%目標函數
steelprob.Objective
= cost
;
%約束條件1,總重量約束
totalWeight
= weightIngots*ingots + sum
(alloys
)+scrap
;
%約束條件2,碳重量約束
carbonIngots
= [5,4,5,3
]/100
;
carbonAlloys
= [8,7,6
]/100
;
carbonScrap
= 3/100
;
totalCarbon
= (weightIngots.*carbonIngots
)*ingots + carbonAlloys*alloys + carbonScrap*scrap
;
%約束條件3,鉬重量約束
molybIngots
= [3,3,4,4
]/100
;
molybAlloys
= [6,7,8
]/100
;
molybScrap
= 9/100
;
totalMolyb
= (weightIngots.*molybIngots
)*ingots + molybAlloys*alloys + molybScrap*scrap
;steelprob.Constraints.conswt
= totalWeight
== 25;
steelprob.Constraints.conscarb
= totalCarbon
== 1.25;
steelprob.Constraints.consmolyb
= totalMolyb
== 1.25;% 問題的求解階段
[sol,fval
] = solve
(steelprob
);
(2)基本非線性示例
(3)基本方程求解示例
(二)基于求解器求解
1.特征
2.例程
(1)步驟:
a.選擇一個優化求解器
b.創建一個目標函數
c.創建約束
d.設置選項,或使用默認選項
e.調用合適的求解器
%指定intlinprog的輸入來表示問題
%intcon變量設置,二進制變量就是控制其上下界為0,1
%A,b表示不等式約束,Aeq,beq表示等式約束
%相當于提前聲明然后再來填充數據f
= [350*5,330*3,310*4,280*6,500,450,400,100
];
A
= [];
b
= [];
intcon
= 1:4
;
Aeq
= [5,3,4,6,1,1,1,1
;5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03
;5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09
];
beq
= [25;1.25;1.25];
lb
= zeros
(8,1);
ub
= ones
(8,1);
ub
(5:end
) = Inf
; % No upper bound on noninteger variables
[x,fval
] = intlinprog
(f,intcon,A,b,Aeq,beq,lb,ub
)
總結:
利用工具本身并不難,難的是對問題的抽象,求解過程中也可以對默認參數進行修改。
總結
以上是生活随笔為你收集整理的混合整数规划线性规划——Matlab例程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。