MATLAB 线性规划实例应用
- 線性規(guī)劃
- x = linprog(f,A,b):求解問題 min fx,約束條件為 Ax <= b
- x = linprog(f,A,b,Aeq,beq):求解上面的問題,但增加等式約束,即 Aeqx = beq,若沒有不等式存在,則令 A= []、b = []
- x = linprog(f,A,b,Aeq,beq,lb,ub):定義設(shè)計變量 x 的下屆 lb 和 上屆 ub,使得 x 始終在該范圍內(nèi),若沒有等式約束,令 Aeq = []、beq = []
- x = linprog(f,A,b,Aeq,beq,lb,ub,x0):設(shè)置初值為 x0。該選項只適用于中型問題,默認(rèn)大型算法將忽略初值
- x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用 options 指定的優(yōu)化參數(shù)進(jìn)行最小化
- [x,fval] = linprog(...):返回解 x 處的目標(biāo)函數(shù)值 fval
- [x,lambda,exitflag] = linprog(...):返回 exitflag 值,描述函數(shù)計算的退出條件
- [x,lambda,exitflag,output] = linprog(...):返回包含優(yōu)化信息的輸出變量 output
- [x,fval,lambda,exitflag,output] = linprog(...):將解 x 處的拉格朗日乘子返回到 lambda 參數(shù)中
-
- lambda 是解 x 處的拉格朗日乘子,它的屬性如下
- lambda.lower:lambda 的下屆
- lambda.upper:lambda 的上屆
- lambda.ineqlin:lambda 的線性不等式
- lambda.eqlin:lambda 的線性等式
-
- 大型優(yōu)化算法:采用 LIPSOL 法,該法在進(jìn)行迭代計算之前首先要進(jìn)行一系列的預(yù)處理
- 中型優(yōu)化算法:linprog 函數(shù)使用的是投影法,就像 quadprog 函數(shù)的算法一樣,linprog 函數(shù)使用的是一種活動集方法,是線性規(guī)劃中單純形法的變種,他通過求解另一個線性規(guī)劃問題來找到初始可行解
- 線性規(guī)劃問題的應(yīng)用
- 某廠生產(chǎn)甲、乙兩種產(chǎn)品,已知制成一噸產(chǎn)品甲需用資源A 3 噸,資源B 4 $m^3$,制成每噸產(chǎn)品乙需用資源A 2 噸,資源B 6 $m^3$,資源C 7 個單位。若每噸產(chǎn)品甲和乙的經(jīng)濟(jì)價值分別為 7 萬元和 5 萬元,3 種資源的限制量分別為 80 噸、220 $m^3$ 和 230 個單位,試分析應(yīng)生產(chǎn)這兩種產(chǎn)品各多少噸才能使創(chuàng)造的總經(jīng)濟(jì)價值最高?
- 這里可以令生產(chǎn)產(chǎn)品甲的數(shù)量為 $x_1$,生產(chǎn)產(chǎn)品乙的數(shù)量為 $x_2$。根據(jù)題意,代碼設(shè)置如下: clc
clear
f = [-7;-5];
A = [3 24 60 7];
b = [80;220;230];
lb = zeros(2,1);
然后調(diào)用 linprog 函數(shù):
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)最優(yōu)化結(jié)果如下:
?
?
-
- 由上可知,生產(chǎn)甲種產(chǎn)品 4.7619 噸、乙種產(chǎn)品 32.8571 噸可使創(chuàng)造的總經(jīng)濟(jì)價值最高,最高經(jīng)濟(jì)價值為 197.6190 萬元。exitflag = 1 表示過程正常收斂于解 x 處。
2.工作人員計劃安排問題
-
- ?某晝夜服務(wù)的公共交通系統(tǒng)每天各時間段(每 4 小時為一個時間段)所需的值班人數(shù)如表所示,這些值班人員在某一時段開始上班后要連續(xù)工作 8 小時(包括輪流用餐時間),請問該公共交通系統(tǒng)至少需要多少名工作人員才能滿足值班的需要?
-
- 這里可設(shè) $x_i$ 為第 i 個時段開始上班的人員數(shù) clc clear f = [1;1;1;1;1;1]; A = [-1 0 0 0 0 -1-1 -1 0 0 0 00 -1 -1 0 0 00 0 -1 -1 0 00 0 0 -1 -1 00 0 0 0 -1 -1]; b = [-50;-30;-70;-60;-40;-20]; lb = zeros(6,1);
- 然后調(diào)用 linprog 函數(shù) [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
- 最優(yōu)化結(jié)果如下:
? 可見只要 6 個時段分別安排 26 人、25 人、45 人、26 人、14 人和 24 人就可以滿足值班的需要,共計 160 人,并且計算結(jié)果 exitflag = 1 是收斂的
?3. 投資問題
-
- 某單位有一批資金用于 4 個工程項目的投資,用于各工程項目時所得的凈收益(投入資金的百分比)如表所示
-
- 由于某種原因,決定用于項目 A 的投資不大于其他各投資之和,而用于項目 B 和 C 的投資要大于項目 D 的投資,試確定使該單位收益最大的投資分配方案。
- 這里可以用 $x_1、x_2、x_3 和 x_4$ 分別代表用于項目 A、B、C 和 D 的投資百分?jǐn)?shù),由于各項目的投資百分?jǐn)?shù)之和必須等于 100%,所以 $x_1+x_2+x_3+x_4 = 1$,代碼設(shè)置如下: f = [-0.18;-0.1;-0.09;-0.12]; A = [1 -1 -1 -10 -1 -1 1]; b = [0;0]; Aeq = [1 1 1 1]; beq = [1]; lb = zeros(4,1);
- 調(diào)用函數(shù): [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb)
- 結(jié)果如下:
說明 A、B、C、D 投入資金的百分比分別為 50%、25%、0%、25% 時,該單位收益最大
4. 工件加工任務(wù)分配問題
-
- ?某車間有兩臺機床甲和乙,可用于加工 3 種工件。假定這兩臺機床的可用臺時數(shù)分別為 600 和 900,3 種工件的數(shù)量分別為 400、600 和 500,且已知用兩臺不同機床加工單位數(shù)量的不同工件所需的臺時數(shù)和加工費用(如表所示),問怎樣分配機床的加工任務(wù),才能既滿足加工工件的需求,又使總加工費用最低?
-
- 這里可設(shè)在甲機床上加工工件1、2 和 3 的數(shù)量分別為 $x_1、x_2、x_3$,在乙機床上加工工件1、2 和 3 的數(shù)量分別為 $x_4、x_5、x_6$,根據(jù) 3 種工種的數(shù)量限制,則有:$x_1+x_4 = 400(對工件 1) ,x_2+x_5 = 600(對工件 2),x_3+x_6=500(對工件 3)$,根據(jù)題意: clc
clear
f = [13;9;10;11;12;8];
A = [0.6 1.2 1.1 0 0 00 0 0 0.4 1.2 1.0];
b = [600;900];
Aeq = [1 0 0 1 0 00 1 0 0 1 00 0 1 0 0 1];
beq = [400 600 500];
lb = zeros(6,1);
然后調(diào)用 linprog 函數(shù):
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb)結(jié)果如下:
- 這里可設(shè)在甲機床上加工工件1、2 和 3 的數(shù)量分別為 $x_1、x_2、x_3$,在乙機床上加工工件1、2 和 3 的數(shù)量分別為 $x_4、x_5、x_6$,根據(jù) 3 種工種的數(shù)量限制,則有:$x_1+x_4 = 400(對工件 1) ,x_2+x_5 = 600(對工件 2),x_3+x_6=500(對工件 3)$,根據(jù)題意: clc
clear
f = [13;9;10;11;12;8];
A = [0.6 1.2 1.1 0 0 00 0 0 0.4 1.2 1.0];
b = [600;900];
Aeq = [1 0 0 1 0 00 1 0 0 1 00 0 1 0 0 1];
beq = [400 600 500];
lb = zeros(6,1);
在甲機床上加工 500 個工件 2,在乙機床上加工 400 個工件 1、加工 100 個工件 2、加工 500 個工件 3,可在滿足條件的情況下使總加工費用最小,最小費用為 14100 元。
?
?5. 廠址選擇問題
-
- ?A、B、C 三地,每地都出產(chǎn)一定數(shù)量的產(chǎn)品,也消耗一定數(shù)量的原料(如表所示),已知制成每噸產(chǎn)品需 3 噸原料,各地之間的距離為:A-B,150km;A-C,100km,B-C,200km。假定每萬噸原料運輸 1lm 的運價是 5000 元,每萬噸產(chǎn)品運輸 1lm 的運價是 6000 元。由于地區(qū)條件的差異,在不同地點設(shè)廠的生產(chǎn)費用也不同。問究竟在哪些地方設(shè)廠,規(guī)模多大,才能使總費用最小?另外,由于其他條件限制,在 B 處建廠的規(guī)模(生產(chǎn)的產(chǎn)品數(shù)量)不能超過 6 萬噸
-
- 這里可令 $x_{ij}$ 為由 i 地運到 j 地的原料數(shù)量(萬噸),$y_{ij}$ 為由 i 地運往 j 地的產(chǎn)品數(shù)量(萬噸),i,j = 1,2,3(分別對應(yīng)A、B、C三地),根據(jù)題意: clc
clear
f = [75;75;50;50;100;100;150;240;210;120;160;220];
A = [1 -1 1 -1 0 0 3 3 0 0 0 0-1 1 0 0 1 -1 0 0 3 3 0 00 0 -1 1 -1 1 0 0 0 0 3 30 0 0 0 0 0 0 0 1 1 0 0];
b = [21;17;22;6];
Aeq = [0 0 0 0 0 0 1 0 1 0 1 00 0 0 0 0 0 0 1 0 1 0 1];
beq = [6;12];
lb = zeros(12,1);
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb);
可見要使總費用最小,A、B、C 三地的建廠規(guī)模分別為 6 萬噸、5.667 萬噸和 6.333 萬噸,最小總費用為 2.9733e+03 萬元
- 這里可令 $x_{ij}$ 為由 i 地運到 j 地的原料數(shù)量(萬噸),$y_{ij}$ 為由 i 地運往 j 地的產(chǎn)品數(shù)量(萬噸),i,j = 1,2,3(分別對應(yīng)A、B、C三地),根據(jù)題意: clc
clear
f = [75;75;50;50;100;100;150;240;210;120;160;220];
A = [1 -1 1 -1 0 0 3 3 0 0 0 0-1 1 0 0 1 -1 0 0 3 3 0 00 0 -1 1 -1 1 0 0 0 0 3 30 0 0 0 0 0 0 0 1 1 0 0];
b = [21;17;22;6];
Aeq = [0 0 0 0 0 0 1 0 1 0 1 00 0 0 0 0 0 0 1 0 1 0 1];
beq = [6;12];
lb = zeros(12,1);
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb);
?6. 確定職工編制問題
-
- 某工廠每日 8小時的產(chǎn)量不低于 1800 件。為了進(jìn)行質(zhì)量控制,計劃聘請兩個不同水平的檢驗員。一級檢驗員的速度為 25件/小時,正確率 98%,計時工資 4元/小時,二級檢驗員的速度為 15件/小時,正確率 95%,計時工資 3元/小時,檢驗員每錯一次,工廠要損失 2 元。現(xiàn)有可供廠方聘請的檢驗員人數(shù)為一級 7人和二級 8人。為使總檢驗費用最省,該工廠應(yīng)聘請一級、二級檢驗員各多少名?
- 可設(shè)需要一級和二級檢驗員的人數(shù)分別為 $x_1$ 和 $x_2$ 名,根據(jù)題意: clc clear f = [40;36]; A = [1 00 1-5 -3]; b = [7;8;-45]; lb = zeros(2,1); [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);
可見,招聘一級檢驗員 7名,二級檢驗員 3名可使總檢驗費用最少,約為400.00元
7. 生產(chǎn)計劃的最優(yōu)化問題
-
- 某工廠生產(chǎn) A 和 B 兩種產(chǎn)品,它們需要經(jīng)過 3 種設(shè)備的加工,其加工如表所示,設(shè)備一、二和三每天可使用的時間分別不超過 11、9 和 12小時。產(chǎn)品 A 和 B 的利潤隨市場的需求有所波動,如果預(yù)測未來某個時期內(nèi) A 和 B 的利潤分別為 5000元/噸和 3000元/噸,問在那個時期內(nèi),每天應(yīng)生產(chǎn)A、B各多少噸,才能使工廠獲利最大?
-
- 這里可設(shè)每天應(yīng)安排生產(chǎn) A 和 B 分別為 $x_1$ 和 $x_2$ 噸,根據(jù)題意: clc
clear
f = [-5;-3];
A = [4 35 46 3];
b = [11;9;12];
lb = zeros(2,1);
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
每天生產(chǎn) A 產(chǎn)品 1.80噸、B產(chǎn)品 0 噸可使工廠獲得最大利益 9000元/噸。
- 這里可設(shè)每天應(yīng)安排生產(chǎn) A 和 B 分別為 $x_1$ 和 $x_2$ 噸,根據(jù)題意: clc
clear
f = [-5;-3];
A = [4 35 46 3];
b = [11;9;12];
lb = zeros(2,1);
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/NikkiNikita/p/9464886.html
總結(jié)
以上是生活随笔為你收集整理的MATLAB 线性规划实例应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 372 B. Co
- 下一篇: selenium定位方法