簡學LINGO(三)——實例篇

1. 裝配線平衡模型

一個裝配線含有一系列的工作站。在終于產品的加工過程中每一個工作站運行一種或者是幾種特定的任務。裝配線周期是指全部工作站完畢分配給他們各自任務所花費時間的最大值。平衡裝配線的目標是為每一個工作站分配加工任務。盡可能使每一個工作站運行同樣數量的任務。其終于標準是轉配線周期最短。

不適當的平衡裝配線將會產生瓶頸——有較少任務的工作站將被迫等待前面分配了較多任務的工作站。

這個模型的目標是最小化裝配線周期。有兩類約束:

(1)要保證每件任務僅僅能也必須分配至一個工作站來加工;

(2)要保證滿足任務件的全部優先關系。

例? 有1件任務(A-K)分配到四個工作站(1-4),任務按次序例如以下。每件任務所花時間例如以下

任務

時間

A

45

B

11

C

9

D

50

E

15

F

12

G

12

H

12

I

12

J

8

K

9

?

這里給出求解模型

model:!裝配平衡模型;
sets:!任務集合,有一個完畢時間屬性T;TASK/A B C D E F G H I J K/:T;!人物之間的優先關系集合;PRED(TASK,TASK)/A,B B,C C,F C,G F,J G,J J,KD,E E,H E,I H,J I,J/;!工作站集合;STATION/1..4/;TXS(TASK,STATION):X;!X是派生集TXS的一個屬性。

假設X(I,K)=I,則表示第I個任務指派給第K個工作站完畢; endsets data: !任務A B C D E F G H I J K的完畢時間預計例如以下; enddata !當任務超過15個時,模型求解將變的非常慢: !每個作業必須指派到一個工作站中; @for(TASK(I):@SUM(STATION(K):X(I,K))=1); !對于每個存在有限關系的作業來說。前者相應的工作站I必須小于后者相應的工作站J; @for(PRED(I,J):@sum(STATION(K):K*X(J,K)-K*X(I,K))>=0); !對于每個工作站來說,其花費時間不應大于裝配線周期; @for(STATION(K): @SUM(TXS(I,K):T(I)*X(I,K))<+CYCTIME); !目標函數時最小化轉配線周期; min=CYCTIME; !指定X(I,J)為0/1變量; @for(TXS:@BIN(X)); end

?

?

2.旅行售貨員問題,又稱貨郎擔問題

有一個銷售員,從城市1出發。要遍訪城市2,3,。。

。,n個一次。最后返回城市1.已知從城市i到j的旅費為Cij,問他該按如何的次序訪問這些城市,是得總旅費最少?能夠用多中方方法把TSP表示成整數規劃模型。把該問題的每個解看做時一個巡回。

在上述意義下,引入0-1整數變量
?

經過若干證明。這里就不在闡述了,我們能夠把TSP轉化為一個混合整數規劃問題

?

?

?這里我們能夠利用這個問題來求解一個詳細問題

?問題1? 現須要一臺機器上加工n個零件。這些零件能夠依照隨意先后順序在機器上進行加工。我們希望加工完畢全部零件的總時間最小。因為加工工藝的要求,加工零件j時機器不許處在對應的狀態Sj(如爐溫)。設起始未加工不論什么零件時機器處于狀態S0。且當全部零件加工完畢后需回復到S0狀態。已知從狀態Si調整到Sj須要時間Cij。零件j本身加工時間為Pj。

為方便起見,引入一個徐零件0,當中加工時間為0。要求狀態為S0。則{0,1,2,。。

,n}的一個圈置轉換pi就表示對全部零件的一個加工順序。則完畢全部加工所需時間為

?

這里給出一個解決該模型的一個簡單的代碼。就是套用上面的模型

!旅行售貨員問題;
model:
sets:city/1..5/:u;link(city,city):dist,x;
endsetsn=@size(city);
data:dist=@qrand(1);!隨即產生。這里能夠改為你要解決的問題的數據;
enddata!目標函數;
min=@sum(link:dist*x);
@for(city(K):@sum(city(I)|I#ne#K:x(I,K))=1;@sum(city(J)|J#ne#K:x(K,J))=1;
);!保證不出圈子;
@for(city(I)|I#gt#1:@for(city(J)|J#gt#1 #and# I#ne#j:u(I)-u(J)+n*x(I,J)<=n-1);
);
!定義X為0/1變量;
@for(link:@bin(x));
end


3.最短路問題

給定N個點Pi組成集合{Pi}。由集合中任一點Pi到還有一點Pj的距離用Cij表示,假設Pi到Pj沒有弧連接,則規定Cij=正無窮大,有規定Cii=0,指定一個終點PN。要求從Pi到PN的最短路線。這里我們用動態規劃的方法來做。

?

?又LINGO我們能夠非常方便的求解上述的模型

!最短路問題;
model:
data:n=10;
enddata
sets:cities/1..n/:F;roads(cities,cities)/1,2 1,32,4 2,5 2,63,4 3,5 3,64,7 4,85,7 5,8 5,96,8 6,97,108,109,10
/:D,P;
endsets
data:
D=6 5                 !該矩陣即為傳說中的權重矩陣3 6 97 5 119 18 7 54 10579;
enddata
F(n)=0;
@for(cities(i)|i#lt#n:F(i)=@min(roads(i,j):D(i,j)+F(j));
);
!顯然。假設P(i,j)=1,則點i到點n的最短路徑的第一步是i——j,否則就不是
由此,我們就可方便的確定出最短路徑;
@for(roads(i,j):P(i,j)=@if(F(i)#eq#D(i,j)+F(j),1,0)
);
end

?

4.分配問題或稱指派問題

這是給n個人分配n項工作以或得摸個最高效果的問題。

第i個人完畢第j項工作須要的平均時間為Cij。

要求給每一個人分配一項工作。并要求分配完這些工作,以使完畢所有任務的總時間最小。該問題能夠表演示樣例如以下
?

?這個模型能夠用LINGO非常方便的求解

model:!7個工人,7個工作的分配問題;
sets:workers/w1..w7/;jobs/j1..j7/;links(workers,jobs):cost,volume;
endsets!目標函數;min=@sum(links:cost*volume);!每一個人僅僅能有一份工作;@for(workers(I):@sum(jobs(J):volume(I,J))=1;);
data:cost=6 2 6 7 4 2 54 9 5 3 8 5 85 2 1 9 7 4 37 6 7 3 9 2 72 3 9 5 7 2 65 5 2 2 8 11 49 2 3 12 4 5 10;
enddata
end 	


?

5.二次分配問題

這個問題與上面的分配問題?。大致相同。相同要引入0-1變量,并且和上述問題有相同的約束?。可是本問題又比約束問題要復雜。我們得到價格系數Cijkl,其解釋是:在i(S上網一個元素)分配給j(T的一個元素)的同一時候把k(s的一個元素)分配給l(T的一個元素)所應承擔的費用。顯然僅僅有當xij=1且xkl=1時,才承擔這樣的費用。

這時我們的模型要變成這樣

?為了理解這個模型。我們在這里增加這個樣例。

首先覺得S是一個工廠的集合。T是n個城市的集合。本問題就是要在每個城市設置一個工廠,并要使工廠之間的總得通訊費用最少。通訊費用取決于:(1)每對工廠之間通訊的次數tik;(2)每對工廠所在兩個城市之間的距離djl。所以就有cijkl=tik*djl(各位大仙湊活的看啊。。。)。

因此總費用能夠用上述的目標函數來表示。

這里給出一個非常經典的題目,也是我遇到的第一道建模問題。想當年不知道lingo的優點。硬是憑著對C++的執拗,用了一堆棧啊。鏈表向量什么的用窮舉給退出來啊,當時多么的自豪。哈哈哈

?

例:有四名同學到一家公司去參加三個階段的面試:公司要求每一個同學必須先找秘書初試,然后到部門主管去復制。最后到經理處去面試,而且不同意插隊。因為四名同學的專業背景不同,所以沒人在三個階段的面試時間也不一樣,例如以下表。

這四名同學約定他們所有面試完畢以后一起離開公司,問他們最快用多長時間完畢面試?

?

這里給出求解的代碼

?

!三階段面試模型;
model:
sets:students;!學生集三階段面試模型;phases;!階段集;sp(students,phases):t,x;ss(students,students)|&1 #lt# &2:y;
endsets
data:students=s1..s4;phases=p1..p3;t=13 15 2010 20 1820 16 108  10 15;
enddatans=@size(students);!學生數;np=@size(phases);!階段數!單個學生面試時間先后順序的約束;@for(sp(I,J)|J#LT#np:x(I,J)+t(I,J)<=x(I,J+1));!學生間的面試先后次序保持不變的約束;@for(ss(I,K):@for(phases(J):x(I,J)+t(I,J)-x(K,J)<=200*y(I,K);x(K,J)+t(K,J)-x(I,J)<=200*(1-y(I,K));));min=TMAX;@for(students(I):x(I,3)+t(I,3)<=TMAX);!把Y定義0-1變量;!把Y定義0-1變量;@for(ss:@bin(y));
end


?以后假設遇到對應的更好的模型是,我會有選擇的加上的。

?

?

?

?

?

轉載于:https://www.cnblogs.com/bhlsheji/p/5319476.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373362.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hibernate緩存級別教程

開始使用Hibernate的人們常見的問題之一就是性能&#xff0c;如果您沒有太多的Hibernate經驗&#xff0c;您會發現應用程序變慢的速度。 如果啟用sql跟蹤&#xff0c;您將看到有多少查詢被發送到數據庫&#xff0c;而這些查詢幾乎不需要Hibernate知識就可以避免。 在當前文章中…

java方法執行的時間_計算Java中任意一個方法的執行時間的工具類

1 packagealgorithm.study.utils;23 importjava.lang.reflect.Method;45 /**6 * This class is getting a method execute time and provide some other functions.7 *8 *authorygh 2017年2月24日9 */10 public classMethodExecuteTimeUtils {1112 /**13 * Get a method execut…

如何在 IIS 中設置 HTTPS 服務

Windows Server2008、IIS7啟用CA認證及證書制作完整過程 這篇文章介紹了如何安裝證書申請工具&#xff1b; 如何在iis創建證書申請&#xff1b; 如何使用iis申請證書生成的txt文件&#xff0c;在工具中開始申請證書&#xff1b; 如何導出證書&#xff1b; 以及在網站中開始使用…

Android之衛星菜單的實現

衛星菜單是現在一個非常受歡迎的“控件”&#xff0c;很多Android程序員都趨之若鶩&#xff0c;預覽如下圖。傳統的衛星菜單是用Animation實現的&#xff0c;需要大量的代碼&#xff0c;而且算法極多&#xff0c;一不小心就要通宵Debug。本帖貼出用屬性動畫Animator來實現衛星菜…

Java中的WADL:溫和的介紹

WADL&#xff08; Web應用程序描述語言 &#xff09;對REST而言&#xff0c;WSDL對SOAP而言。 這種語言的僅僅存在引起了很多爭議&#xff08;請參閱&#xff1a; 我們需要WADL嗎&#xff1f; 或者 需要 WADL還是不需要WADL &#xff09;。 我可以想到使用WADL的一些合法用例&a…

類成員函數模板特化

//類成員函數模板特化 #include <stdio.h> class A{ public:template <class T>void Print(){printf("A template\n");} };template<> void A::Print<int>(){printf("int\n"); }int main(){A a;a.Print<double>();a.Print&l…

為云量身定制您的服務

相信大家都聽說過Amazon的AWS。作為業內最為成熟的云服務提供商&#xff0c;其運行規模&#xff0c;穩定性&#xff0c;安全性都已經經過了市場的考驗。時至今日&#xff0c;越來越多的應用被部署在了AWS之上。這其中不乏Zynga及Netflix這樣著名的服務。 然而這一切并沒有停滯不…

在Vaadin和JSF之間選擇

隨著最新版本的Primefaces 3.0的發布&#xff0c;JSF終于達到了前所未有的成熟度和實用性&#xff0c;使其與其他流行的Rich Internet Applications&#xff08;RIA&#xff09;選項如Google Web Toolkit&#xff08;GWT&#xff09;&#xff0c;ExtJS&#xff0c;Vaadin&#…

20145202馬超《信息安全系統設計基礎》實驗二總結

[實驗二]&#xff08;http://www.cnblogs.com/nizaikanwoma/p/6131778.html&#xff09; 轉載于:https://www.cnblogs.com/tuolemi/p/6131987.html

java 連接ldap_ldap java 連接demo

public class LDAPHelper {/*** LDAP可以理解為一個多級目錄&#xff0c;這里&#xff0c;表示要連接到那個具體的目錄*/private final String baseDn "ouPeople,dcchangyeyi,dccom";private LdapContext ctx null;private final Control[] connCtls null;private…

flask開發restful api系列(1)

在此之前&#xff0c;向大家說明的是&#xff0c;我們整個框架用的是flask sqlalchemy redis。如果沒有開發過web&#xff0c;還是先去學習一下&#xff0c;這邊只是介紹如果從開發web轉換到開發移動端。如果flask還不是很熟悉&#xff0c;我建議先到這個網站簡單學習一下&am…

Apache Commons Lang StringUtils

因此&#xff0c;認為最好談論我喜歡的另一個Java庫。 它已經存在了一段時間&#xff0c;也許不是最令人興奮的庫&#xff0c;但是它非常有用。 我可能每天都使用它。 org.apache.commons.lang.StringUtils StringUtils是Apache Commons Lang&#xff08; http://commons.apac…

JEE7:展望新時代

計劃于2012年下半年發布的Java EE 7預計的JSR都已啟動并正在運行。 Java EE 7發行版是日期驅動的&#xff0c;它將反映該行業遷移到云中時不斷變化的需求&#xff1a;任何未準備就緒的內容將推遲到Java EE 8中使用 。 這是Java EE 7平臺中不同規范的關鍵功能的更新和摘要。 1。…

Cocos2d-JS項目之UI界面的優化

測試環境&#xff1a; iphone4、iOS6.1.2、chrome 37.2062.60&#xff0c;Cocos2d-js 3.6 之前寫了不少&#xff0c;實際項目也按這個去優化了&#xff0c;也有效果&#xff0c;但到最后才發現&#xff0c;尼瑪&#xff0c;之前都搞錯了&#xff0c;之所以有效果是歪打正著。。…

java數_java大數

java大數還是很好用的&#xff01;基本加入&#xff1a;import java.math.BigInteger;import jave.math.BigDecimal;分別是大數和大浮點數。首先讀入可以用&#xff1a;Scanner input new Scanner(System.in);BigInteger a input.nextBigInteger();這樣讀還是很方便的當然還有…

【Qt之Quick模塊】6. QML語法詳解_2類型系統

描述 在QML文檔中對象層次結構的定義中可能使用的類型可以來自各種來源。它們可能是: 由QML語言原生提供通過QML模塊通過c注冊由QML模塊作為QML文檔提供 此外&#xff0c;應用程序開發人員可以通過直接注冊c類型&#xff0c;或者通過在QML文檔中定義可重用的組件(然后可以導…

JS顯示當前時間(包含農歷時間)

時間格式&#xff1a; JavaScript代碼&#xff1a; var sWeek new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");var dNow new Date();var CalendarData new Arra…

Maven原型創建技巧

我最近需要為姜黃SOA項目創建一些Maven原型。 對于不了解的人來說&#xff0c; Maven原型是一種基于一些預先罐裝的項目模板生成項目的方法。 對于當前的姜黃SOA原型&#xff0c;它將創建一個多模塊Maven項目&#xff0c;該項目包含Interface和Service項目以及基本的WSDL和適當…

MyBatis操作指南-與Spring集成(基于注解)

轉載于:https://www.cnblogs.com/weilu2/p/mybatis_spring_integration_basic_on_annotation.html

Windows mysql boost_Win7下Boost庫的安裝

Boost庫是C領域公認的經過千錘百煉的知名C類庫&#xff0c;涉及編程中的方方面面&#xff0c;簡單記錄一下使用時的安裝過程1.boost庫的下載boost庫官網主頁&#xff1a;www.boost.org2.安裝將下載的壓縮包解壓到指定的目錄3.建立編譯工具bjam.exe在源碼目錄下執行bootstrap.ba…