




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、LingoLuo Dan 2013.5.20軟件操作2 / 162013年秋季Lingo by Rodan軟件操作3 / 162013年秋季Lingo by Rodan軟件界面4 / 162013年秋季Lingo by RodanHow to5 / 16設起點為1,終點為n,引入01型決策變量Xij,如果弧(i , j)在最短路上,則Xij=1,否則Xij=0于是最短路問題可以用如下模型來描述:式中E表示全體邊的集合 2013年秋季Lingo by Rodan優化中的兩個變量概念2009年春季圖算法及其在通信網絡中的應用6 / 16通常是些給定的數據,如邊容量capacity,安排單位流量耗費
2、的成本cost邊界條件這個值到底取啥,是需要由優化來進行決定的。如最短路中選不選這條邊Xij,ABC三種商品每樣的進貨量多少才能達到最大利潤決策變量Lingo模型的基本要素7 / 16(1)集合段(SETS)(2)數據段(DATA)(3)初始段(INIT)賦初值(4)目標與約束段(5)計算段(CALC)預處理2013年秋季Lingo by Rodan集合段8 / 16集部分是LINGO模型的一個可選部分。在LINGO模型中使用集之前,必須在集部分事先定義。集部分以關鍵字“sets:”開始,以“endsets”結束。(前面的例子里面就沒有集合定義)示例Setname /member_list/
3、:attribute_list; 原始集語法注意:用“ ”表示該部分內容可選。 Setname是你選擇的來標記集的名字,Member_list是集成員列表。如果集成員放在集定義中,那么對它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集定義中,那么可以在隨后的數據部分定義它們。Tips:參考C+中的變量定義功能2013年秋季Lingo by Rodan集合段9 / 16集部分是LINGO模型的一個可選部分。在LINGO模型中使用集之前,必須在集部分事先定義。集部分以關鍵字“sets:”開始,以“endsets”結束。(前面的例子里面就沒有集合定義)示例Setname /member_li
4、st/ :attribute_list; 原始集語法 當顯式羅列成員時,必須為每個成員輸入一個不同的名字,中間用空格或逗號擱開,允許混合使用。例如 可以定義一個名為students 的原始集,它具有成員John、Jill、Rose和Mike,屬性有sex 和age:sets:students/John, Jill, Rose, Mike/: sex, age;endsets2013年秋季Lingo by Rodan集合段示例Setname /member_list/ :attribute_list; 原始集語法2.當隱式羅列成員時,不必羅列出每個集成員。可采用如下語法: setname/mem
5、ber1.memberN/: attribute_list; 這里的member1是集的第一個成員名,memberN是集的最末一個成員名。LINGO將自動產生中間的所有成員名。LINGO也接受一些特定的首成員名和末成員名,用于創建一些特殊的集。示例:隱式成員列表格式示例所產生集成員1.n1.51,2,3,4,5StringM.StringNCar2.car14Car2,Car3,Car4,Car14DayM.DayNMon.FriMon,Tue,Wed,Thu,FriMonthM.MonthNOct.JanOct,Nov,Dec,JanMonthYearM.MonthYearNOct2001.
6、Jan2002Oct2001,Nov2001,Dec2001,Jan20022013年秋季Lingo by Rodan集合段示例Setname /member_list/ :attribute_list; 原始集語法 集成員不放在集定義中,而在隨后的數據部分來定義。 !集部分;sets: students:sex,age; endsets !數據部分;data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata不推薦2013年秋季Lingo by Rodan派生集合Setname (parent_set_lis
7、t) /member_list/ :attribute_list; 派生集語法setname是派生集的名字。parent_set_list是已定義的集的列表,多個時必須用逗號隔開。如果沒有指定成員列表,那么LINGO會自動創建父集成員的所有組合作為派生集的成員。派生集的父集既可以是原始集,也可以是其它的派生集。指定成員: SETS: node/1,2,3,4/;!節點集合; link(node,node)/1,2 1,3 2,3 3,4/:weight,capacity;Endsets不指定成員: SETS: node/1,2,3,4/;!節點集合; link(node,node):weigh
8、t,capacity;Endsets2013年秋季Lingo by Rodan派生集合Setname (parent_set_list) /member_list/ :attribute_list; 派生集語法不是全部,但是滿足某些條件?比如完全圖(每個點都跟別的點鄰接)加過濾條件派生集合名 (父集合) |過濾條件 :屬性列表; 不指定成員: SETS: node/1,2,3,4/;!節點集合; link1(node,node):weight,capacity; !成員個數為幾個? link2(node,node)|&2 #ne# &1: price;Endsets程序示例2013年秋季Lin
9、go by Rodan派生集合Setname (parent_set_list) /member_list/ :attribute_list; 派生集語法SETS: node/1,2,3,4/;!節點集合; link1(node,node):weight,capacity; link2(node,node)|&2 #ne# &1: price;Endsets成員列表充當了下標的角色2013年秋季Lingo by RodanLingo模型的基本要素15 / 16(1)集合段(SETS)(2)數據段(DATA)(3)初始段(INIT)賦初值(4)目標與約束段(5)計算段(CALC)預處理2013年
10、秋季Lingo by Rodan數據部分LINGO為用戶提供了兩個可選部分:輸入集成員和數據的數據部分和為決策變量設置初始值的初始部分。數據部分以關鍵字“data:”開始,以關鍵字“enddata”結束。在這里,可以指定集成員、集的屬性。語法: object_list = value_list; 對象列(object_list)包含要指定值的屬性名、要設置集成員的集名,用逗號或空格隔開。一個對象列中至多有一個集名,而屬性名可以有任意多。 數值列(value_list)包含要分配給對象列中的對象的值,用逗號或空格隔開。注意屬性值的個數必須等于集成員的個數。2013年秋季Lingo by Roda
11、n數據部分語法: object_list = value_list; sets: glass/A,B,C/: capacity, price;endsets data: capacity =1,2,3; price =4,5,6; enddatasets: glass /A,B,C/: capacity, price; endsets data: capacity, price =1 4 2 5 3 6; enddata2013年秋季Lingo by RodanLingo模型的基本要素2013年秋季Lingo by Rodan18 / 16(1)集合段(SETS)(2)數據段(DATA)(3)
12、初始段(INIT)賦初值(4)目標與約束段(5)計算段(CALC)預處理模型的初始部分一個初始部分以“init:”開始,以“endinit”結束。初始部分的初始聲明規則和數據部分的數據聲明規則相同init: X, Y = 0, .1; endinit Y=log(X); X2+Y2 #eq# #ne# #gt# #ge# #lt# #le# #and# #or#目標與約束(2 )邏輯運算符 2013年秋季Lingo by Rodan個人感覺:過濾條件condition處使用邏輯運算符,表達式中使用,=目標與約束(3 )關系運算符關系運算符與邏輯運算符#eq#、#le#、#ge#截然不同,前者是
13、模型中該關系運算符所指定關系的為真描述,而后者僅僅判斷一個該關系是否被滿足:滿足為真,不滿足為假。LINGO有三種關系運算符:“=”、“=”。LINGO中還能用“”表示大于等于關系。LINGO并不支持嚴格小于和嚴格大于關系運算符。然而,如果需要嚴格小于和嚴格大于關系,比如讓A嚴格小于B:AB,那么可以把它變成如下的小于等于表達式:A+=B,這里是一個小的正數,它的值依賴于模型中A小于B多少才算不等。2013年秋季Lingo by RodanLINGO提供了大量的標準數學函數:abs(x) 返回x的絕對值sin(x) 返回x的正弦值,x采用弧度制cos(x) 返回x的余弦值tan(x) 返回x的
14、正切值exp(x) 返回常數e的x次方log(x) 返回x的自然對數lgm(x) 返回x的gamma函數的自然對數sign(x) 如果x=0時,返回不超過x的最大整數;當x0時,返回不低于x的最大整數。smax(x1,x2,xn) 返回x1,x2,xn中的最大值smin(x1,x2,xn) 返回x1,x2,xn中的最小值 目標與約束2013年秋季Lingo by Rodan集循環函數。function相應于下面羅列的四個集循環函數之一;setname是要遍歷的集;set_ index_list是集索引列表;conditional_qualifier是用來限制集循環函數的范圍,當集循環函數遍歷集
15、的每個成員時,LINGO都要對conditional_qualifier進行評價,若結果為真,則對該成員執行function操作,否則跳過,繼續執行下一次循環。expression_list是被應用到每個集成員的表達式列表,當用的是for函數時,expression_list可以包含多個表達式,其間用逗號隔開。這些表達式將被作為約束加到模型中。當使用其余的三個集循環函數時,expression_list只能有一個表達式。如果省略set_index_list,那么在expression_list中引用的所有屬性的類型都是setname集。function(setname(set_index_li
16、st) |conditional_qualifier:(expression_list);2013年秋季Lingo by Rodan該函數用來產生對集成員的約束。基于建模語言的標量需要顯式輸入每個約束,不過for函數允許只輸入一個約束,然后LINGO自動產生每個集成員的約束。例如 產生序列1,4,9,16,25model:sets: number/1.5/:x;endsets for(number(I): x(I)=I2);end Feasible solution found. Total solver iterations: 0 Variable Value X( 1) 1.000000
17、X( 2) 4.000000 X( 3) 9.000000 X( 4) 16.00000 X( 5) 25.00000 Row Slack or Surplus 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000(1) for2013年秋季Lingo by Rodan該函數用來產生對集成員的約束。基于建模語言的標量需要顯式輸入每個約束,不過for函數允許只輸入一個約束,然后LINGO自動產生每個集成員的約束。例如 帶過濾條件的:model:sets: number/1.5/:x;endsets for(number(i)|i#ne#2
18、: x(i)=i2);end(1) for將數據賦值放在約束里面2013年秋季Lingo by Rodan容量約束?(注意哪些值是給定了的) for( link(i,j):( x(i,j) #LE# capacity(i,j) )= 1 ); for( link(i,j) | I #lt# j: X(i ,j ) = 0 );(1) forfunction(setname(set_index_list) |conditional_qualifier:(expression_list);2013年秋季Lingo by Rodan30(2) sum該函數返回遍歷指定的集成員的一個表達式的和。例4.
19、11 求向量5,1,3,4,6,10前5個數的和。model:data: N=6;enddatasets: number/1.N/:x;endsetsdata: x = 5 1 3 4 6 10;enddata s=sum(number(I) | I #le# 5: x);end(2) sum2013年秋季Lingo by Rodan31 Feasible solution found. Total solver iterations: 0 Variable Value N 6.000000 S 19.00000 X( 1) 5.000000 X( 2) 1.000000 X( 3) 3.00
20、0000 X( 4) 4.000000 X( 5) 6.000000 X( 6) 10.00000 Row Slack or Surplus 1 0.0000002013年秋季Lingo by Rodan32(3)min和max返回指定的集成員的一個表達式的最小值或最大值。例如 求向量5,1,3,4,6,10前5個數的最小值,后3個數的最大值。model:data: N=6;enddatasets: number/1.N/:x;endsetsdata: x = 5 1 3 4 6 10;enddata minv=min(number(I) | I #le# 5: x); maxv=max(nu
21、mber(I) | I #ge# N-2: x);end結果如下2013年秋季Lingo by Rodan33Feasible solution found. Total solver iterations: 0 Variable Value N 6.000000 MINV 1.000000 MAXV 10.00000 X( 1) 5.000000 X( 2) 1.000000 X( 3) 3.000000 X( 4) 4.000000 X( 5) 6.000000 X( 6) 10.00000 Row Slack or Surplus 1 0.000000 2 0.0000002013年秋季
22、Lingo by Rodan34 / 16AGFEDCB24123133134圖中有7個頂點A,B,.,G,邊上的數字表示權重Wij,求從頂點A到G距離最短的路徑。設起點為1,終點為n,引入01型決策變量Xij,如果弧(i , j)在最短路上,則Xij=1,否則Xij=0于是最短路問題可以用如下模型來描述:式中E表示全體邊的集合 2013年秋季Lingo by Rodan對于上例,編寫LINGO程序如下:model:sets:nodes/A,B,C,D,E,F,G/; !定義7個頂點;links(nodes,nodes)/ A,B A,C B,D B,E B,F C,D C,E C,F D,G E,G F,G/: W, X;!定義哪些頂點之間有邊相聯,W為權重,X為01型決策變量;endsetsdata: W=2 4 3 3 1 2 3 1 1 3 4;enddata N=size(nodes); min=sum(links:W*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫療質量及醫療安全教育培訓專題計劃
- 路南教師選聘面試題及答案
- 2025年 邯鄲市曲周縣招聘城市管理協管員試卷附答案
- 學校食堂培訓
- 溝通技能培訓課件
- 腫瘤藥物的分類
- 商務部培訓資料
- 畜牧環保培訓課件
- 酒店關于人身安全培訓
- 腫瘤專科結業答辯
- 寶媽日常心理護理
- 2025年社會學概論測試題含答案(附解析)
- 安全檢查作業行為規范與專業知識 -改
- 學校信息化建設十五五規劃方案
- 2025年保險專業知識能力測試題及答案
- 小學民法典主題班會教案
- 電機學II知到智慧樹章節測試課后答案2024年秋廣東工業大學
- JT-T-1178.2-2019營運貨車安全技術條件第2部分:牽引車輛與掛車
- 三基訓練習題集-風濕免疫科(題目及答案)
- 無損檢測射線常見缺陷圖集
- 冷卻塔填料施工組織設計方案和安全措施
評論
0/150
提交評論