整数规划 - 数学建模
一、整數規劃模型及概念
規劃問題的數學模型一般由三個因素構成 決策變量 目標函數 約束條件;
數學規劃是運籌學的一個重要分支,線性規劃是數學規劃的一個重要分支;
線性規劃即以線性函數為目標函數,線性條件為約束條件;
如果一個線性規劃模型中的部分或全部決策變量取整數值,則稱該線性規劃模型為整數線性規劃模型,除此還有非線性整數規劃。
從決策變量的取值范圍來看,整數規劃通常可以分為以下幾種類型:
1、純整數規劃:全部決策變量都必須取整數值的整數規劃模型;
2、混合整數規劃:決策變量中有一部分必須取整數值,另一部分可以不取整數值的整數規劃模型;
3、0-1整數規劃:決策變量只能取0或1的整數規劃。
二、整數規劃模型求解及應用
整數線性規劃模型的一般形式為
1、基于求解器求解
標準形式如下
解法:
其中
輸入參數:
f 為系數向量,系數向量表示目標函數,列向量;
intcon 為整數約束組成的向量,它的值指示決策變量 x 中應取整數值的分量;
A 為線性不等式約束矩陣,A 表示約束中的線性系數;
b 為線性不等式約束向量,b 表示約束中的常向量;
Aeq 為線性等式約束矩陣,beq 為線性等式約束向量;
lb 為下界,ub 為上界;
x0為初始點,指定為實數數組。當 f 存在時,x0 中的元素數與 f 中的元素數相同。否則,該數字與 A 或 Aeq 的列數相同;
options 為 intlinprog 的選項。
輸出參數:
x 為解,fval 為目標函數最優值;
exitflag 為算法停止條件,output 為求解過程摘要。
2、基于問題求解
首先需要用變量和表達式構造優化問題,然后用solve函數求解,詳見例題。
三、例題
1、基于求解器求解
clc, clear f = [1; 1; 1; 1; 1; 1]; % 目標函數系數矩陣 intcon = [1:6]; % 目標函數整數項 A = [1, 0, 0, 0, 0, 1; % 構造不等式約束系數矩陣1, 1, 0, 0, 0, 0; 0, 1, 1, 0, 0, 0; 0, 0, 1, 1, 0, 0; 0, 0, 0, 1, 1, 0; 0, 0, 0, 0, 1, 1]; b = [35; 40; 50; 45; 55; 30]; % 構造不等式約束常數矩陣 [x, fval] = intlinprog(f, intcon, -A, -b, [], [], zeros(6, 1)); % 調用求解器求解2、基于問題求解
clc, clear prob = optimproblem; % 定義優化問題,默認求最小 x = optimvar('x',6,'Type','integer','LowerBound',0); % name為變量名稱,n為變量維度,cstr為索引名稱,Type為變量類型,continuous(默認實數)或integer(整數),LowerBound為下界,UpperBound為上界 prob.Objective = sum(x); % .Objective為目標函數,定義目標函數 con = optimconstr(6); % 創建一個由空優化約束組成的 6×1 數組,使用 constr 初始化用于創建約束表達式的循環 a = [35,40,50,45,55,30]; % 不等式常數項 con(1) = x(1)+x(6)>=35; % 構造不等式約束 for i =1 :5con(i+1) = x(i)+x(i+1)>=a(i+1); end prob.Constraints.con = con; [sol, fval, flag] = solve(prob), sol.x % 求解求得最優解為x1 = 35, x2 = 5, x3 = 45, x4 = 0, x5 = 55, x6 = 0,目標函數最優值為140。
四、蒙特卡洛法解決非線性整數規劃
蒙特卡洛法又稱計算機隨機模擬法,是基于對大量事件的統計結果來實現一些確定性問題的計算。
非線性規劃的解法雖然尚未成熟,但是非線性整數規劃限定了變量為整數,從而整數解為有限個,為枚舉法提供了方便,故在一定計算量的情況下,用蒙特卡洛法進行隨機枚舉可以得出一個較為滿意的解。一些情況還可以使用Lingo得到更優的答案,在此就不再贅述了。
總結
以上是生活随笔為你收集整理的整数规划 - 数学建模的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言过时了?扯淡!
- 下一篇: 开源社区介绍