1. 程式人生 > 實用技巧 >matlab cvx工具箱解決線性優化問題

matlab cvx工具箱解決線性優化問題

題目來源:數學建模演算法與應用第二版(司守奎)第一章習題1.4

題目說明

作者在答案中已經說明,求解上述線性規劃模型時,儘量用Lingo軟體,如果使用Matlab軟體求解,需要做變數替換,把二維決策變數化成一維決策變數,很不方便。(原答案附末尾)

這裡我們可以採用matlab的cvx工具箱進行編寫,會簡化程式碼並提升可讀性

clc;clear;
format short;
% 初始資料
w = [18 15 23 12];
r = [3100 3800 3500 2850] .* w;
s = [480 650 580 390] .* w;
ls = [6800 8700 5300];
lw = [10 16 8];

%開始求解
cvx_begin  
    variable x(4,3); 	% 決策變數
    maximize(sum(r*x)); % 目標函式
    subject to          % 約束條件
        w*x<=lw;
        s*x<=ls;
        x >= 0;
        sum(x,2) <= 1     
cvx_end  

disp("每種貨物噸數(t):");
result = w' .* sum(x,2);
disp(result);
disp('最大利潤(元):');
disp(cvx_optval);

程式碼說明:

w為每種貨物的總重量

r為每種貨物的總利潤

s為每種貨物所佔用的總空間

ls為飛機上的空間限制

ls為飛機上的重量限制

執行結果:

原版答案: