日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性规划 | 用实例展示Matlab和lingo求解线性规划问题的差异

發布時間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性规划 | 用实例展示Matlab和lingo求解线性规划问题的差异 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、線性規劃

什么是線性規劃問題?

線性規劃是在一系列的線性條件的約束下,從而規定了可行解,在通過具體的目標函數,求得滿足函數的最優解
例如平常的線性規劃函數的例子:

在matlab中使用matlab標準的格式:

若是目標函數是求解最大值的話,則取-C形式:
例如線性規劃:

的MATLAB標準型為:

二、linprog函數

在matlab中,linprog函數可以求解線性規劃問題,用于尋找目標函數的最小值。
matlab中,規劃模型的標注寫法如下:

(1)[x,fval]=linprog(f,A,b)
用于求解:

(2)[x,fval]=linprog(f,A,b,Aeq,beq)
用于求解:

如果沒有等式存在,就用[]代替Aeq和beq。

(3)[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)
用于求解:

返回的x為所求的結果,fval為最值。
linprog中fval都是求最小值,這個要記住。
A和b是不等式約束條件的參數。
Aeq和beq是等式約束條件的參數。
lb和ub為x取值的取值范圍。

例如:
a+b+c<30
c<15
b<10
函數:max f = 10a+20b+30c
因為linprog求的是最小值,我們將原式改為:
f = -(10a+20b+30c)
這樣我們有了函數f=[-10;-20;-30];,然后:
根據約束條件不等式,有:
A = [1 1 1;
0 0 1;
0 1 0] ;
b = [30;15;10] ;
但這樣算出來的結果大家會發現是小數,也可能是負數。
因此我們加入a、b、c取值的上下限:
lb = [0 0 0]
ub = [30 30 30]
如果在計算中需要得到小數的結果,只要寫成0.00或者30.00就可以了,最后帶入函數計算就可以了。

三、intlinprog函數

intlinprog()是matlab中用于求解混合整數線性規劃(Mixed-integer linear programming)的一個函數,用法基本和linprog差不多。
語法:

x=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

與linprog相比,多了參數intcon,代表了整數決策變量所在的位置。
例如:

四、Lingo軟件

LINGO是用來求解線性和非線性優化問題的簡易工具。
所有代碼在 Lingo Model - Lingo 1中編寫,寫完后點擊工具條上的紅色的靶子運行。

例如:

代碼:

max=x1+x2; x1+9/14*x2<=51/14; -2*x1+x2<=1/3; @gin(x1);@gin(x2); end

LINGO提供了大量的標準數學函數
@abs(x) 返回x 的絕對值
@sqrt() 開方
@sin(x) 返回x 的正弦值,x 采用弧度制
@cos(x) 返回x 的余弦值
@tan(x) 返回x 的正切值
@exp(x) 返回常數e 的x 次方
@log(x) 返回x 的自然對數
@lgm(x) 返回x 的gamma 函數的自然對數
@sign(x) 如果x<0 返回-1;否則,返回1
@floor(x) 返回x的整數部分。當x>=0 時,返回不超過x 的最大整數;當x<0
時,返回不低于x 的最大整數。
@smax(x1,x2,…,xn) 返回x1,x2,…,xn 中的最大值
@smin(x1,x2,…,xn) 返回x1,x2,…,xn 中的最小值

變量界定函數
變量界定函數實現對變量取值范圍的附加限制,共4種
@bin(x) 限制x 為0 或1 — 用于0-1規劃
@bnd(L,x,U) 限制L≤x≤U
@free(x) 取消對變量x 的默認下界為0 的限制,即x 可以取任意實數
@gin(x) 限制x 為整數
在默認情況下,LINGO 規定變量是非負的,也就是說下界為0,上界為+∞。@free 取消
了默認的下界為0的限制,使變量也可以取負值。@bnd用于設定一個變量的上下界,它也可 以取消默認下界為0的約束。
注意:
LINGO總是根據“MAX=”或“MIN=”尋找目標函數;
程序語句的順序一般不重要,既可以隨意調換;
程序運用函數時都是以@開頭;
程序中的變量默認為非負數,想要改變變量類型必須有相應函數調整
程序中變量不區分大小寫;
語句必須以分號結尾;
注釋以!開始,且注釋語句后面必須也有分號,注釋默認注釋到第一個分號處,意思是分號前面會全部被注釋掉。

五、實例

根據外場改裝合同要求,改裝備件需于每季度末分別提供10、15、25、30。已知該專業廠各季度末的生產能力及每套產品的成本構成,如果專業廠生產出的備件當季不能交付,每套積壓一季度需存儲、維護等的費用0.15萬元,建立一個數學模型,要求在完成合同的情況下,使該全年生產(包括存儲、維護)費用最小。

解:
設x_ij為第i季度生產的用于第j季度交貨產品的數量,則由題意得:
x_11=10
x_12+x_22=15
x_13+x_23+x_33=25
x_14+x_24+x_34+x_44=30

又由生產能力的要求,有
x_44<=10
x_33+x_34<=30
x_22+x_23+x_24<=35
x_11+x_12+x_13+x_14<=25

再設c_ij表示第i季度生產的用于第j季度交貨的每臺產品的實際成本,其值如下表:

目標函數為:
min f = 10.8 * x11 + 10.95 * x12 + 11.10 * x13 + 11.25*x14 + 11.10 * x22 + 11.25 * x23 + 11.40 * x24 + 11 * x33 + 11.15 * x34 + 11.30 * x44;

MATLAB求解:

上式中,Aeq為左邊的矩陣,beq為等號右邊的向量;

上式中,A為左邊的矩陣,b為等號右邊的向量;

% 線性規劃問題 % 目標函數: % minF = 10.8 * x11 + 10.95 * x12 + 11.10 * x13 + 11.25 + x14 + ... % 11.10 * x22 + 11.25 * x23 + 11.40 * x24 + ... % 11 * x33 + 11.15 * x34 + ... % 11.30 * x44;minfun = [10.8 ,10.95 , 11.10 , 11.25 ,11.10 ,11.25,11.40 ,11,11.15,11.30]'; Aeq = zeros(10); Aeq(1,1) = 1; Aeq(2,2) = 1; Aeq(2,5) = 1; Aeq(3,3) = 1; Aeq(3,6) = 1; Aeq(3,8) = 1; Aeq(4,4) = 1; Aeq(4,7) = 1; Aeq(4,9) = 1; Aeq(4,10) = 1; beq = [10,15,25,30,0,0,0,0,0,0]'; A = zeros(10); A(1,1) = 1; A(1,2) = 1; A(1,3) = 1; A(1,4) = 1; A(2,5) = 1; A(2,6) = 1; A(2,7) = 1; A(3,8) = 1; A(3,9) = 1; A(4,10) = 1; b = [25,35,30,10,0,0,0,0,0,0]'; [x,y]=intlinprog(minfun,1:10,A,b,Aeq,beq,zeros(10,1)',[]); disp('x的值為:'); x disp('最小值為:'); y

運行結果:
x的值為:

100 150 1500 10 20 10

最小值為:

887

Lingo求解:

min=10.8 * x11 + 10.95 * x12 + 11.10 * x13 + 11.25*x14 + 11.10 * x22 + 11.25 * x23 + 11.40 * x24 + 11 * x33 + 11.15 * x34 + 11.30 * x44; x11=10; x12+x22=15; x13+x23+x33=25; x14+x24+x34+x44=30; x11+x12+x13+x14<=25; x22+x23+x24<=35; x33+x34<=30; x44<=10; end

運行結果:

最小值為:887

由此可見,MATLAB和lingo所求的最優解一致,但是每個變量值x并不一樣,說明規劃有多組解。
不足之處,請多指教!

總結

以上是生活随笔為你收集整理的线性规划 | 用实例展示Matlab和lingo求解线性规划问题的差异的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。