題目:
實驗五:MATLAB最最佳化工具箱的使用
(1)線性規劃應用案例的求解
1、基本要求
透過一個農業生產計劃最佳化安排的例項求解,培養學生解決實際線性規劃問題的初步能力;熟悉線性規劃的建模過程;掌握Matlab最佳化工具箱中線性規劃函式的呼叫。
2、主要內容
某村計劃在100公頃的土地上種植a、b、c三種農作物。可以提供的勞力、糞肥和化肥等資源的數量,種植每公頃農作物所需這三種資源的數量,以及能夠獲得的利潤如表所示。
種植投入產出表
|
用 工 |
糞肥(噸) |
化肥(千克) |
利潤(元) |
a |
450 |
35 |
350 |
1500 |
b |
600 |
25 |
400 |
1200 |
c |
900 |
30 |
300 |
1800 |
可提供資源 |
63000 |
3300 |
33000 |
|
其中一個勞動力幹一天為1個工。現在要求為該村制定一個農作物的種植計劃,確定每種農作物的種植面積,使得總利潤最大。
3、操作要點
(1)建立線性規劃的數學模型;
(2)安裝Matlab最佳化工具箱(Optimization Toolbox),並學習工具箱中求解線性規劃的函式;
(3)利用Matlab最佳化工具箱解線性規劃問題。
(4)執行該程式,在命令窗記錄下最優解x和對應的最優值fval。
(5)按照模板撰寫實驗報告,要求規範整潔。
4、主要儀器裝置
微機及Matlab軟體
(2)二次規劃應用案例的求解
1、基本要求
透過一個投資組合最佳化問題的例項求解,培養學生解決實際二次規劃問題的初步能力;熟悉線性規劃的建模過程;掌握Matlab最佳化工具箱中線性規劃函式的呼叫。
2、上機主要內容
求解從一點(0,0,0)到超平面的最短距離,
其中,,。
透過建模構造二次規劃問題,求解以上問題的最優解和最優值。
3、操作要點
(1)建立二次規劃的數學模型;
(2)安裝Matlab最佳化工具箱(Optimization Toolbox),並學習工具箱中求解二次規劃的函式;
(3)利用Matlab最佳化工具箱解二次規劃問題。
(4)執行該程式,在命令窗記錄下最優解x和對應的最優值fval。
(5)按照模板撰寫實驗報告,要求規範整潔。
4、主要儀器裝置
微機及Matlab軟體
程式碼:
1. 演算法步驟
1. 演算法步驟
1. 定義變數
設 x1, x2, x3 分別為 a, b, c 三種農作物的種植面積(公頃)。
2. 建立目標函式
目標函式是最大化總利潤,可以表示為:
Z = 1500x1 + 1200x2 + 1800x3
3. 建立約束條件
根據題目給出的資源限制,我們可以建立以下約束條件:
用工限制:450x1 + 600x2 + 900x3 ≤ 63000
糞肥限制:35x1 + 25x2 + 30x3 ≤ 3300
化肥限制:350x1 + 400x2 + 300x3 ≤ 33000
種植面積限制(非負且總和為100公頃):x1, x2, x3 ≥ 0 且 x1 + x2 + x3 = 100
4. 使用MATLAB求解
在MATLAB中,我們可以使用linprog函式來求解線性規劃問題。首先,我們需要將問題轉化為linprog的標準形式:
min -Z
s.t. Ax ≤ b
Aeqx = beq
lb ≤ x ≤ ub
其中,A 和 b 是線性不等式約束的係數和右側值,Aeq 和 beq 是線性等式約束的係數和右側值,lb 和 ub 是變數的下界和上界。
2. 程式碼
% 定義目標函式的係數(注意:linprog預設求解最小化問題,所以我們取負號)
f = [-1500; -1200; -1800];
% 定義不等式約束的係數和右側值
A = [450, 600, 900;
35, 25, 30;
350, 400, 300];
b = [63000; 3300; 33000];
% 定義等式約束的係數和右側值(種植面積總和為100公頃)
Aeq = [1, 1, 1];
beq = 100;
% 定義變數的下界和上界(這裡只有下界,上界可以設為inf)
lb = [0; 0; 0];
ub = [inf; inf; inf];
% 呼叫linprog函式求解
[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub);
% 輸出結果
if exitflag > 0
disp('Optimal solution found.')
disp(['Profit: ', num2str(-fval)]) % 注意:取負號得到實際的最大利潤
disp(['Area for crop a: ', num2str(x(1))])
disp(['Area for crop b: ', num2str(x(2))])
disp(['Area for crop c: ', num2str(x(3))])
else
disp('No feasible solution found.')
end
3. 結果
>> lab05
Optimal solution found.
Optimal solution found.
Profit: 162000
Area for crop a: 60
Area for crop b: 0
Area for crop c: 40