學習LINGO語言課件全解_第1頁
學習LINGO語言課件全解_第2頁
學習LINGO語言課件全解_第3頁
學習LINGO語言課件全解_第4頁
學習LINGO語言課件全解_第5頁
已閱讀5頁,還剩145頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、LINGO *一. 優(yōu)化模型與優(yōu)化軟件簡介二. LINGO軟件的基本使用方法Outline三. LINGO程序流程控制和子模型 *一. 優(yōu)化模型與優(yōu)化軟件簡介*約束條件決策變量優(yōu)化問題的一般形式目標函數(shù)無約束優(yōu)化: 只有目標函數(shù), 沒有約束條件有約束優(yōu)化: 目標函數(shù)和約束條件都有普通方程組:沒有(1)(3), 只有(2)不等式方程組:沒有(1)(2), 只有(3)*優(yōu)化類型連續(xù)優(yōu)化 : 全部決策變量取值均 為連續(xù)數(shù)值 (實數(shù))離散優(yōu)化 : 部分或全部決策變量 只取離散數(shù)值*連續(xù)優(yōu)化 線性規(guī)劃(LP) 目標和約束均為線性函數(shù) 非線性規(guī)劃(NLP) 目標或約束中有非線性函數(shù) 二次規(guī)劃(QP) 目標

2、為二次函數(shù)、 約束為線性*離散優(yōu)化 整數(shù)規(guī)劃(IP) 決策變量(全部或部分)為整數(shù) 整數(shù)線性規(guī)劃(ILP),整數(shù)非線性規(guī)劃(INLP) 純整數(shù)規(guī)劃(PIP), 混合整數(shù)規(guī)劃(MIP) 一般整數(shù)規(guī)劃,0-1(整數(shù))規(guī)劃*常用優(yōu)化軟件 LINDO/LINGO軟件MATLAB優(yōu)化工具箱/mathematica優(yōu)化程序包EXCEL軟件的優(yōu)化功能SAS(統(tǒng)計分析)軟件的優(yōu)化功能*建模時需要注意的幾個基本問題 1、盡量使用實數(shù)優(yōu)化,減少整數(shù)約束和整數(shù)變量2、盡量使用光滑優(yōu)化,減少非光滑約束的個數(shù) 如:盡量少使用絕對值、符號函數(shù)、多個變量求最大/最小值、四舍五入、取整函數(shù)等*建模時需要注意的幾個基本問題 3

3、、盡量使用線性模型,減少非線性約束和非線性變量的個數(shù) (如x/y 5 改為x5y)4、合理設定變量上下界,盡可能給出變量初始值 5、模型中使用的參數(shù)數(shù)量級要適當(如小于103)*二. LINGO軟件的基本使用方法*1 LINGO入門*max 2x1+3x2 St. 4x1+3x2=10 3x1+5x2=12 x10 x20目標函數(shù)約束條件決策變量設有數(shù)學模型如下:*第一步:啟動Lingo屏幕顯示如下: 標記LINGO的外窗口是主框架窗口,主框架窗口的上面包含所有的命令菜單和命令工具欄; 標記LINGO MODEL-LINGO1的子窗口是一個新的、空白的模型窗口。*第二步:在模型窗口中輸入模型m

4、odel:max = 2*x1+3*x2;4*x1+3*x210;3*x1+5*x212;endMax 2x1+3x2 St. 4x1+3x2=10 3x1+5x2=12 x10 x20*第三步:求解模型 1)選擇菜單 LINGO|Solve 或者按工具欄的 * 2)LINGO開始編譯模型,如有語法錯誤將返回一個錯誤的消息并指明錯誤出現(xiàn)的位置;如果通過編譯, LINGO將激活 Solver運算器 尋求模型的最優(yōu)解;*3)首先出現(xiàn)solver status 窗口,其作用是監(jiān)控solver的進展和顯示模型的維數(shù)等信息;*Solver Status 窗口*4)計算完成后出現(xiàn)Solution Repo

5、rt窗口顯示模型解的詳細信息;*Solution Report 窗口Global optimal solution found at iteration: 2Objective value: 7.454545Variable Value Reduced Cost x1 1.272727 0.000000 x2 1.636364 0.000000Row Slack or Surplus Dual Price 1 7.454545 1.000000 2 0.000000 0.9090909E-01 3 0.000000 0.5454545*Reduced Cost:在max模型中: 相應變量的 r

6、educed cost值表示當該變量每增加一個單位時目標函數(shù)減少的量。 本例中此值均為0*Reduced Cost:Reduced Cost 值列出最優(yōu)單純形表中判別數(shù)所在行的變量的系數(shù),表示當變量有微小變動時,目標函數(shù)的變化率。其中基變量的reduced cost值應為0, 對于非基變量 Xj, 相應的reduced cost值表示當某個變量Xj 增加一個單位時目標函數(shù)減少的量( max型問題)。本例中此值均為0。*SLACK OR SURPLUS: 給出約束條件的松馳變量或剩余變量的值; 小于等于約束為松馳變量(SLACK); + 大于等于約束為剩余變量(SURPLUS); -*DUAL

7、PRICES:對偶價格或影子價格 DUAL PRICES表示當對應約束有微小變動時,目標函數(shù)的變化率,即約束條件右端的常數(shù)項每增加一個單位,目標函數(shù)相應獲得的改變量。 顯然,如果在最優(yōu)解處約束正好取等號(緊約束),該值才可能不是0;對于非緊約束對該值必為0,表示對應約束中不等式右端項的微小擾動不影響目標函數(shù)。*2 Lingo的基本用法注意事項*1)每一個模型都以 model: 開始, 又以 end 結束,也可省略此結構;*2)目標函數(shù)必須由 min = 或 max = 開頭。*3)可以用表示表示=; Lingo無嚴格小于,欲使ab, 可以適當選取小的正常數(shù)e 表示成a+eb,*4) LINGO

8、的每一語句以 ; 結束;5) 注釋 以 ! 開始, 以 ; 結束;*變量名:.不區(qū)分大小寫.由字母數(shù)字下劃線組成.第一個字符必須是字母.變量名最長為32個字符* LINGO編輯器用 藍色顯示LINGO關鍵字 綠色顯示注釋 其他文本用黑色 匹配的括號用紅色高亮度顯示*8) 變量和數(shù)字放在約束條件的左、右端均可;但最好變量在左,數(shù)字在右。9) Lingo 變量默認域為非負實數(shù),可以改變默認域.*10)行名 name例:Objectivemax=2*x+3*y;Con1 4*x+3*y10;Con2 3*x+5*y12;線性規(guī)劃(行名).lg4默認為1,2,3*Global optimal solu

9、tion found. Objective value: 7.454545 Total solver iterations: 2 Variable Value Reduced Cost X 1.272727 0.000000 Y 1.636364 0.000000 Row Slack or Surplus Dual Price OBJECTIVE 7.454545 1.000000 CON1 0.000000 0.9090909E-01 CON2 0.000000 0.5454545*3 LINGO的建模語言*以運輸實例逐步分析6個倉庫向8個小販供應同一種貨物,如何運,總運輸費用最???注:每個

10、倉庫可以向每個小販供貨,一共48個可能運貨路線。 倉庫貨存量、小販需求量、每條路線的單位運輸費用三個表如下:*倉庫貨存量:capacity倉庫號貨存量 w1 60 w2 55 w3 51 w4 43 w5 41 w6 52*小販需求量:demand 小販代號 貨物需求量 v1 35 v2 37 v3 22 v4 32 v5 41 v6 32 v7 43 v8 38*每單位貨物運輸費用表:cost 小倉 販 庫 v1 v2 v3 v4 v5 v6 v7 v8 w162674259 w249538582 w352197433 w476739271 w523957265 w655228143*dem

11、and_j 表示第j個小販的需求量capacity_i 表示第i個倉庫的庫存量cost_i_j 表示從第i個倉庫到第j個小販的單位運輸費用已知數(shù)量決策變量volume_i_j 表示從第i個倉庫到第j個小販的運輸量*數(shù)學模型可表示如下:*當然目標函數(shù)可以如下輸入: min = 6 * volume_1_1 + 2 * volume_1_2 + 6 * volume_1_3 + . 1 * volume_6_6 + 4 * volume_6_7 + 3 * volume_6_8;* 但是較大模型如果像上面那樣輸入又費時,又容易出錯! 這就需要LINGO的建模語言*LINGO的建模語言優(yōu)點:1)可以

12、用類似于標準數(shù)學符號的方式表示你的模型;2)可以用一個緊湊的語句表示一系列約束。3)數(shù)據(jù)可獨立于模型:LINGO可以從文本文件、電子數(shù)據(jù)表、數(shù)據(jù)庫中讀取數(shù)據(jù)。*LINGO模型的構成:5個段 目標函數(shù)與約束條件段 集合段(sets: endsets) 數(shù)據(jù)段(data: enddata) 初始段(init: endinit) 計算段(calc: endcalc)Lingo建模語言的重點和難點是:對集合概念的理解和正確使用*為什么使用集合 集合是LINGO建模語言的基礎,是LINGO程序設計最強有力的基本構件。借助于集合,能夠用一個單一的、長的、簡明的復合公式表示一系列相似的約束,從而可以快速方便

13、地表達規(guī)模較大的模型。*什么是集合 集合是一群相聯(lián)系的對象,比如倉庫、小販、運輸路線,這些對象也稱為集合的成員。每個集合成員可能有一個或多個與之有關聯(lián)的特征,我們把這些特征稱為屬性。 屬性值可以預先給定,也可以是未知的,有待于LINGO求解。 *從我們的數(shù)學模型看需要三個集合:(1)倉庫-6個成員-貨存量(2)小販-8個成員-需求量(3)運輸路線-48個成員 -單位運費和運貨量*LINGO有兩種類型的集合原始集合(primitive set):由一些最基本的對象組成的。派生集(derived set): 用一個或多個其它集來定義的,也就是說,它的成員來自于其它已存在的集。*下面我們學習集合定義

14、部分*1. 以sets:開始,以endsets結束; sets: endsets*2. 原始集合定義法:setname /member_list/ :attribute_list ;。setname是集合的名字;。member_list是成員列表,各成員之間可用空格或逗號分隔;。attribute_list是集合成員所具有的屬性列表,多個屬性之間用逗號分隔;。原始集合的member_list, attribute_list是可選項;*倉庫和小販的集合可如下定義*sets: warehouses / w1 w2 w3 w4 w5 w6 /: capacity; vendors / v1,v2,v

15、3,v4,v5,v6, v7,v8 / : demand;endsets*成員較多時,可使用隱式成員列表 setname /member1.memberN/ :attribute_list;*數(shù)字型字符數(shù)字型星期型月份型年份-月份型*隱式成員列表類別*(1)數(shù)字型 1.n 例:1.5 (1,2,3,4,5)(2)字符數(shù)字型 stringM.stringN例: truck3.truck34*(3)星期型 dayM.dayN例:mon.fri (Mon, Tue, Wed, Thu, Fri)(4)月份型 MonthM.MonthN例:OCT.JAN (Oct, Nov, Dec, Jan)*(5

16、)年份-月份型monthYearM.monthYearN例:OCT2001.JAN2002 (2001.10 2001.11 2001.12 2002.1)*倉庫和小販的集合也可如下定義*sets: warehouses / w1.w6/: capacity; vendors / v1.v8 /: demand;endsets*3. 派生集合定義法:setname (parent_set_list) /member_list/ :attribute_list;parent_set_list是父集合名列表*48條運輸路線集合定義*links(warehouses,vendors) : cost,

17、 volume;*三個集合定義如下*sets: warehouses / wh1.wh6 /: capacity; vendors / v1.v8 /: demand; links( warehouses, vendors): cost,volume;endsets*運輸問題的三個集合說明:這段代碼定義了4個屬性值,在接下來的模型中就可以使用屬性值capacity(1),capacity(2),capacity(6); demand(1),demand(2) ,demand(8);cost(1,1), cost(1,2) , cost(1,8) , cost(2,1), cost(2,2) ,

18、 cost(2,8) , cost(6,1), cost(6,2) , cost(6,8);volume的引用同cost。*4.集合成員過濾:trucks/1.100/:capacity;heavy_duty (trucks) | capacity(&1) #gt# 50000 : ; &1是集合索引號放置器,如果有兩個父集合,就是&1,&2*下面我們學習數(shù)據(jù)定義* 以data:開始,以enddata結束; data: . enddata*例如:設有如下集合sets: set1/a,b,c/:x,y;endsets如果想賦值 x(1)=1, x(2)=2, x(3)=3, y(1)=4,y(2

19、)=5, y(3)=6,則數(shù)據(jù)段可以為* data: x=1,2,3; y=4 5 6; enddatadata: x,y=1 4 2 5 3 6; enddata 多個數(shù)據(jù)之間可用逗號或空格分隔 *若成員屬性值相同,數(shù)據(jù)段定義如下:data: x=3; !(所有成員的x=3); y=6; !(所有成員的y=6);enddata *也可以在運行時輸入屬性值:data: x=?; !(運行時輸入所有成員的x值); y=6; enddata*運輸問題的數(shù)據(jù)部分*data:capacity=60,55,51,43,41,52;demand=35 37 22 32 41 32 43 38;*cost

20、= 6 2 6 7 4 2 5 9 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3;enddata*sets: sett : x, y ;endsetsdata: sett, x, y = a 1 4 b 2 5 c 3 6;enddata sets: sett/a,b,c/ : x, y ;endsetsdata: x =1 2 3; y=4 5 6; enddata 集合成員可以在數(shù)據(jù)段定義:*運輸實例:sets: warehouses: capacity;endsetsdata

21、: !可以寫成warehouses =w1.w6; !也可以同時定義集合成員列表和屬性值; warehouses, capacity= w1 60,w2 55, w3 51,w4 43, w5 41,w6 52;enddata* * 初始化定義* 只在非線性規(guī)劃中使用,指定初始值。 init: . endinit* 例: init: x=0.999; y=0.002; endinit y=log(x); x2+y2=1;給了恰當?shù)某跏贾?,會減少運算時間。*計算段定義*calc: . . .endcalc計算段的作用: 在模型輸入后,LINGO開始正式求解模型之前對原始數(shù)據(jù)進行一定的計算,得到我

22、們模型中要使用的部分數(shù)據(jù)。*一個簡單的計算段例子:model:data: x,y,z = 1, 2, 3;enddatacalc: avg = ( x + y + z) / 3;endcalcend*目標函數(shù)和約束條件段* LINGO提供了集合循環(huán)函數(shù)和集合操作函數(shù)使得目標函數(shù)和約束條件的書寫如同數(shù)學公式那樣簡單。四個集合循環(huán)函數(shù)FOR、SUM 、 MAX、MIN*sum ( setname ( set_index_list) | condition : expression);求和*運輸問題的目標函數(shù)*min = sum( links ( i, j) : cost( i, j) * volu

23、me( i, j) );min = sum( links : cost* volume );*運輸問題實例中的求和*!從6個倉庫發(fā)到第j個小販的貨物量總和;sum( warehouses(i) : volume(i, j) );*從第i個倉庫發(fā)出到8個小販的貨物量總和;sum( vendors(j) : volume( i , j ) )*for ( setname ( set_index_list) | condition : expression_list ); 生成約束for 對集合setname中的每個成員獨立地生成約束,約束由約束表達式列表expression_list描述; 多個表

24、達式之間用分號相隔。*每個小販的需求約束*?。ㄒ?個倉庫發(fā)給每個小販的貨物總量=小販的需求量);for( vendors(j) : sum( warehouses( i): volume( i, j) ) =demand( j) );*每個倉庫的供貨約束*for( warehouses( i) : sum( vendors(j) : volume( i, j) ) capacity( i) );!(要求每個倉庫發(fā)給8個小販的貨物總量= required(j) );*size(setname) 返回集合setname中所包含的成員個數(shù)。*第二章 LINGO與其它軟件交換數(shù)據(jù)*拷貝、粘貼From

25、 ExelPastefromexel.lg4* 輸入輸出函數(shù)用來與外部數(shù)據(jù)源連接 text()、 ole()、 file()、odbc()、 dual()*file( filename )在模型的集合和數(shù)據(jù)部分使用, 從文本文件輸入數(shù)據(jù).*sets: warehouses / file( 1.txt) / : capacity; vendors / file( 1.txt ) / : demand; links( warehouses, vendors) : cost, volume;endsets 運輸實例的數(shù)據(jù)可以從文本文件輸入:*data:capacity = file( 1.txt )

26、;demand = file( 1.txt );cost = file( 1.txt );enddata1.txt文件內容 1.txt*text( filename ) 在模型的數(shù)據(jù)部分使用, 向文本文件輸出數(shù)據(jù).Outputtotext.lg4*ole( spreadsheet_file ,range_name_list ) 在模型的數(shù)據(jù)和集合部分使用,與excel交換數(shù)據(jù)*運輸實例的數(shù)據(jù)可以從Excel輸入:sets: warehouses: capacity; vendors : demand; links( warehouses, vendors) : cost, volume;end

27、sets*data: warehouses, vendors, capacity, demand, cost = ole ( 2.xls, warehouses, vendors, capacity, demand, cost );enddata*在Excel中定義單元格范圍名稱的方法: 按鼠標左鍵拖曳選擇單元格范圍, 釋放鼠標按鈕, 選擇“插入|名稱|定義”, 輸入希望的名字, 點擊“確定”按鈕。*2.xls從Excel輸入數(shù)據(jù).lg4*odbc(data_source, table_name, col_1, col_2 . ) 在模型的數(shù)據(jù)部分使用,與數(shù)據(jù)庫進行數(shù)據(jù)傳輸 *運輸實例的數(shù)據(jù)可

28、以從數(shù)據(jù)庫輸入:sets: warehouses: capacity; vendors : demand; links( warehouses, vendors) : cost, volume;endsets*data: warehouses, capacity= odbc(); vendors, demand= odbc(); links,cost = odbc(); odbc()=volume; enddata*trans.mdb與數(shù)據(jù)庫的數(shù)據(jù)傳遞.lg4*第三章 LINGO的內部函數(shù)* 1. 標準運算符算術運算符: * / + -邏輯運算符: #EQ# #NE# #GE# #GT# #L

29、E# #LT# #NOT# #AND# #OR#*關系運算符: = = 可以用表示=或*運算符的優(yōu)先級 優(yōu)先級運算符最高#NOT# (負號)* /+ (減法)#EQ# #NE# #GT# #GE# #LT# #LE# #AND# #OR#最低(=)*lingo變量默認域為非負實數(shù)free(variable) 取消默認域,使變量可以取任意實數(shù)gin(variable) 限制變量取整數(shù)值bin(variable) 限制變量取值為0,1bnd(low,variable,up) 限制變量于一個有限的范圍3. 變量界定函數(shù)*練習1x1=2, x2 =3,Z*17練習1*練習2X1=1X2=0X3=1Z=

30、8練習2*abs(x)、cos(x)、sin(x) 、tan(x) 、exp(x) 、sign(x) floor(x) (返回x的整數(shù)部分)smax(x1,x2,xn) (返回x1,x2,xn的最大值)smin(x1,x2,xn) 4. 數(shù)學函數(shù)*5. 條件控制if ( logical_condition, true_result, false_result )計算logical_condition,若真返回true_result否則返回false_result.*7個選項卡(可設置80-90個控制參數(shù))*范例 *整數(shù)規(guī)劃 整數(shù)規(guī)劃.lg4*二次規(guī)劃的例子(lingo).lg4*遞規(guī)調用.lg

31、4 已知 ,求a7 * 學習方法:(1)上課各位老師講的每個有數(shù)據(jù)的規(guī)劃模型上機用lingo語言實踐;(2) LINGO 的help下有一項Additional Examples of LINGO Modeling,可以仔細研究每個例子的模型。*某車間有甲、乙兩臺機床,可用于加工三種工件。假定這兩臺車床的可用臺時數(shù)分別為800和900,三種工件的數(shù)量分別為400、600和500,且已知用三種不同車床加工單位數(shù)量不同工件所需的臺時數(shù)和加工費用如下表。問怎樣分配車床的加工任務,才能既滿足加工工件的要求,又使加工費用最低? 練習3* 練習3車床類 型單位工件所需加工臺時數(shù)單位工件的加工費用可用臺時數(shù)

32、工件1工件2工件3工件1工件2工件3甲0.41.11.013910800乙0.51.21.311128900*解1 設在甲車床上加工工件1、2、3的數(shù)量為x1、x2、x3,在乙車床上加工工件1、2、3的數(shù)量分別為x4、x5、x6??山⒁韵戮€性規(guī)劃模型: *解2 設在甲車床上加工工件i的數(shù)量為x(i), 單位工件所需加工臺時數(shù)為timex(i),單位工件的加工費用為costx(i),在乙車床上加工工件i的數(shù)量為y(i),單位工件所需加工臺時數(shù)為timey(i)單位工件的加工費用為costy(i)工件i的加工數(shù)量為demand(i)*數(shù)學模型*Lingo建模sets:Chechuang/1.3/

33、 :costx,costy, timex,timey,x,y,demand;endsets*Lingo建模min=sum( chechuang : costx*x+costy*y )sum(chechuang:timex*x)800;sum(chechuang:timey*y)900;for(chechuang:x+y=demand);for(chechuang:gin(x);gin(y);*data:costx=13,9,10;costy=11,12,8;timex=0.4,1.1,1;timey=0.5,1.2,1.3;demand=400,600,500;enddata練習3*Lingo

34、-Generate-Display modelMODEL:_1 MIN= 13 * X_1 + 11 * Y_1 + 9 * X_2 + 12 * Y_2 + 10 * X_3 + 8 * Y_3 ; _2 0.4 * X_1 + 1.1 * X_2 + X_3 = 800 ; _3 0.5 * Y_1 + 1.2 * Y_2 + 1.3 * Y_3 = 900 ;_4 X_1 + Y_1 = 400 ; _5 X_2 + Y_2 = 600 ; _6 X_3 + Y_3 = 500 ;GIN( X_1); GIN( Y_1); GIN( X_2); GIN( Y_2); GIN( X_3); GIN( Y_3); END*練習4-求S到T的最短路56774968658336C1B1C2B2A1A2A3TS6*model:sets:cities/s,a1,a2,a3, b1,b2,c1,c2,t/:l;roads(cities,cities)/ s,a1 s,a2 s,a3 a1,b1 a1,b2 a2,b1 a2,b2 a3,b1 a3,b2 b1,c1 b1,c2 b2,c1 b2,c2 c1,t c2,t/:d;endsets*data:d=6 3 3 6 5 8 6 7 4 6 7 8 9 5 6;enddata*l(1)=0;fo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論