6.15

七安。發表於2024-06-13

今天完成工程數學作業實驗五

實驗五:MATLAB最最佳化工具箱的使用

一、實驗目的

透過一個農業生產計劃最佳化安排的例項求解,培養學生解決實際線性規劃問題的初步能力;熟悉線性規劃的建模過程;掌握Matlab最佳化工具箱中線性規劃函式的呼叫。

透過一個投資組合最佳化問題的例項求解,培養學生解決實際二次規劃問題的初步能力;熟悉線性規劃的建模過程;掌握Matlab最佳化工具箱中線性規劃函式的呼叫。

二、實驗內容

1某村計劃在100公頃的土地上種植a、b、c三種農作物。可以提供的勞力、糞肥和化肥等資源的數量,種植每公頃農作物所需這三種資源的數量,以及能夠獲得的利潤如表所示。

種植投入產出表

用 工

糞肥(噸)

化肥(千克)

利潤(元)

a

450

35

350

1500

b

600

25

400

1200

c

900

30

300

1800

可提供資源

63000

3300

33000

其中一個勞動力幹一天為1個工。現在要求為該村制定一個農作物的種植計劃,確定每種農作物的種植面積,使得總利潤最大。

2求解從一點(0,0,0)到超平面的最短距離,

其中,,。

透過建模構造二次規劃問題,求解以上問題的最優解和最優值。

三、演算法步驟、程式碼、及結果

1. 演算法步驟

①、

②、

2. 程式碼

①、% 定義目標函式的係數(注意:linprog求最小值,故目標函式取負)

f = [-1500, -1200, -1800];

% 定義不等式約束的係數矩陣A和右側向量b

A = [1 1 1; 450 600 900; 35 25 30; 350 400 300];

b = [100; 63000; 3300; 33000];

% 定義決策變數的下界(非負)

lb = [0, 0, 0];

% 呼叫linprog函式求解

options = optimoptions('linprog','Algorithm','dual-simplex');

[x, fval] = linprog(f, A, b, [], [], lb, [], options);

% 輸出結果

fprintf('最優解為:\n');

disp(x);

fprintf('最大總利潤為: %d元\n', -fval); % 注意fval取負

②、% 定義引數

A = [1 2 -1; -1 1 -1];

b = [4; 2];

% 構建二次規劃模型

Q = eye(3);

c = [];

lb = [0, 0, 0];

ub = [];

% 使用 linprog 函式求解

options = optimoptions(@linprog, 'Algorithm', 'interior-point');

[x, fval] = linprog(c, [], [], A, b, lb, ub, [], options);

% 輸出結果

disp("最優解:");

disp(x);

disp("最優值:");

disp(-fval);

  1. 結果

①、

②、

四、心得體會

線性規劃應用案例

理論聯絡實踐:透過解決農業生產計劃的最佳化問題,我深刻理解了線性規劃理論在實際問題中的應用。將抽象的數學概念轉化為具體的生產計劃,讓我認識到數學模型在解決實際問題中的強大作用。

模型構建能力:建立線性規劃模型的過程中,我學會了如何將複雜的現實問題抽象為一系列數學關係式。特別是如何根據資源限制和目標函式(本例中為總利潤最大化)來準確設定決策變數、目標函式和約束條件,這一過程鍛鍊了我的邏輯思維和問題分析能力。

工具箱應用:掌握了Matlab最佳化工具箱中linprog函式的使用,從安裝配置到呼叫引數的設定,如演算法選擇(雙單純形演算法),這不僅提升了我的程式設計技能,也讓我感受到現代軟體工具對最佳化問題求解效率的顯著提升。

結果分析:透過觀察最優解和最優值,我直觀地理解了線性規劃解決方案對實際問題決策的指導意義。例如,透過對比不同作物的種植面積分配,我能夠評估不同方案對總利潤的影響,這對實際農業生產具有重要的經濟意義。

二次規劃應用案例

模型升級:雖然實驗中二次規劃部分的程式碼存在一些誤導(實際上應使用quadprog函式而非linprog解決二次規劃問題),但這一環節讓我意識到了從線性規劃到二次規劃問題複雜度的提升,以及模型選擇對問題解決的重要性。

演算法理解:透過嘗試理解並應用不同的求解演算法(如內點法),我深入學習了不同最佳化演算法的適用場景和效能差異,這對於選擇合適的求解策略至關重要。

綜合能力提升:二次規劃的探索,雖然因程式碼問題未能直接呈現結果,但這個過程鍛鍊了我的自學能力和問題解決能力。它促使我去查閱資料,學習如何正確使用Matlab工具箱中的其他函式,如quadprog,來解決非線性最佳化問題。

實踐經驗:整個實驗過程,從理論學習到實際操作,再到結果的分析與討論,為我提供了寶貴的實踐經驗。這種理論與實踐相結合的學習方式,極大地增強了我的專業技能和問題解決信心。

綜上所述,這次實驗不僅鞏固了我的理論知識,更重要的是提高了我在面對實際問題時的模型構建、工具應用和結果分析能力。我相信,這些寶貴的經驗和技能將在未來的學習和工作中發揮重要作用。