数学建模——线性规划
目錄
基本概念
模型求解和應用
基于求解器的求解方法
基于問題的求解方法
其他?
基本概念
運籌學的一個重要分支是數學規劃,線性規劃是數學規劃的一個重要的分支。
變量稱為決策變量,規劃的目標稱為目標函數,限制條件稱為約束條件,s.t.是“受約束于”的意思。
建立線性規劃模型的一般步驟為:①分析問題,找出決策變量。②找出等式或不等式約束條件。③構造關于決策變量的一個線性函數。
線性規劃模型的一般形式:
或:
為目標函數的系數向量,又稱為價值向量;為決策向量;為約束方程組的系數矩陣;為約束方程組的常數向量。
還有標準型:
目標函數為極大型,約束條件為等式約束。滿足約束條件的解為可行解,使目標函數達到最大值得可行解角叫最優解。所有可行解構成的集合叫做可行域,記為R。
在數學規劃問題求解過程中,一定還要計算靈敏度分析。靈敏度分析指系統因周圍條件變化顯示出來的敏感程度的分析。線性規劃問題的a、b、c都設定為常數,但是在實際過程中,這些系數都會有少許的變動。
模型求解和應用
MATLAB中求解數學規劃的問題有兩種模式:基于求解器的求解方法和基于問題的求解方法,
基于求解器的求解方法
需要將線性規劃化為標準形式:
要求目標函數必須是最小化,約束條件分為小于等于約束和等號約束,lb和ub是決策變量上下界。
MATLAB函數調用格式為:
[x,fval] = linprog(f,A,b)
[x,fval] = linprog(f,A,b,Aeq,beq)
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)
x返回的是決策變量的取值,fval返回的是目標函數的最優值,f為價值向量,A,b對應的是線性不等式約束,Aeq和beq對應的是線性等式的約束,lb和ub分別對應決策向量的下界向量和上界向量。
這種方法只能應用于決策向量是一維的情況。
基于問題的求解方法
首先用變量和表達式構造優化問題,然后用solve函數求解,可以用doc optimproblem查看幫助。
①prob=optimproblem('ObjectiveSense','max');
ObjectiveSense可以是max和min,代表優化最大值還是最小值,默認是min
②定義f,A,b(同上,f可以定義為行向量,這樣目標函數不同再轉置)
③x=optimvar('x',2,1,'TYPE','integer','LowerBound',0,'UpperBound',inf);
第一個‘x’里面是變量名,列向量,后面是存在幾行幾列。
‘TYPE’,后面定義的是該函數所屬類型,比如說integer整數型,double雙精度型號
‘LowerBound'與'UpperBound'表示下界與上界所跟的0,inf分別是范圍
④prob.Objective=f?* x;%目標函數,目標函數需要得到一個標量數值,不是矩陣向量
⑤prob.Constraints.con=A*x<=b;%約束條件,只有一個約束,也可以不加.con,.con是標簽,可以自己命名,多個約束條件時,必須標簽不能一樣。
⑥[sol fval flag out]=solve(prob);%fval是最優值,sol.x是決策變量的值,當多個決策變量時,可以sol.y,flag在線性規劃中不用在意,在非線性規劃中注意不能為負值。
例如:
?采用求解器求解:
clc,clear f = [-2;-3;5];%轉換為求最小 A = [-2,5,-1;1,3,1]; b = [-10;12]; Aeq = [1,1,1]; beq = [7]; lb = zeros(3,1); [x,fval] = linprog(f,A,b,Aeq,beq,lb,[]); x -fvalx =
? ? 6.4286
? ? 0.5714
? ? ? ? ?0
ans =
? ?14.5714
采用基于問題的求解
clc,clear prob=optimproblem('ObjectiveSense','max'); x=optimvar('x',3,'LowerBound',0); prob.Objective=2*x(1) + 3*x(2) - 5*x(3); prob.Constraints.con1=2*x(1) - 5*x(2) + x(3)>=10; prob.Constraints.con2=x(1) + 3*x(2) + x(3)<=12; prob.Constraints.con3=x(1) + x(2) + x(3)==7; [sol fval flag out]=solve(prob); sol.x fvalans =
? ? 6.4286
? ? 0.5714
? ? ? ? ?0
fval =
? ?14.5714
其他?
- MATLAB中,加載現有的txt文件的矩陣時,若用load函數,則矩陣應每一行列數應該相等。如果缺少個別的數,可使用readmatrix函數。writematrix(a,'data.xlsx')可以寫入Excel中。?
- 矩陣索引a(1:end,1),end就自動是行的最后一列
- sum(a,'all')表示矩陣a的所有元素求和
總結
以上是生活随笔為你收集整理的数学建模——线性规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装axios
- 下一篇: Excel做题记录——整数规划优化模型