public class AssignWorkProblem {
創新互聯是一家專注于做網站、成都網站制作與策劃設計,翁源網站建設哪家好?創新互聯做網站,專注于網站建設十余年,網設計領域的專業建站公司;建站業務涵蓋:翁源等地區。翁源做網站價格咨詢:13518219792
public static void main(String[] args) {
/*
*測試
**/
int[][] cost=new int[][]{{2,15,13,4},{10,4,14,15},{9,14,16,13},{7,8,11,9}};
System.out.println(Arrays.toString(awpProcedure(cost, 4, 4)));
cost=new int[][]{{12,7,9,7,9},{8,9,6,6,6},{7,17,12,14,12},{15,14,6,6,10},{4,10,7,10,6}};
System.out.println(Arrays.toString(awpProcedure(cost, 5, 5)));
}
/*
* 費用矩陣costMatrix,由于要改變costMatrix的值,clone方法只能對基本類型;
* pnum即為幾個人,也是costMatrix的行數,wnum是幾個任務,也是costMatrix的列數
* 返回值:沒兩個數字為一組,表示i,j。如返回[1,1,2,0]表示costMatrix[1][1]、costMatrix[2][0]費用最低
*/
public static int[] awpProcedure(int[][] costMatrix,int pnum,int wnum){
if(pnum1||pnumwnum)
return null; //test n=m
int[][] costC=new int[pnum][]; //clone 一份costMatrix
for(int i=0;ipnum;i++){
costC[i]=costMatrix[i].clone();
}
//每行減去最小的元素
int[] lzeroa=new int[pnum+1]; //記錄每行0的個數,lzero[pnum]記錄0最少的行標
lzeroa[pnum]=-1;
int i,j;
for(i=0;ipnum;i++){
int lmin=costC[i][0]; //記錄每行最小的
for(j=1;jwnum;j++)
lmin=lmincostC[i][j]?costC[i][j]:lmin;
for(j=0;jwnum;j++){
costC[i][j]-=lmin;
lzeroa[i]+=costC[i][j]==0?1:0;
}
}
for(j=0;jwnum;j++){
int cmin=costC[0][j]; //記錄每列最小的
for(i=1;ipnum;i++)
cmin=cmincostC[i][j]?costC[i][j]:cmin;
if(cmin==0)continue;
for(i=0;ipnum;i++){
costC[i][j]-=cmin;
lzeroa[i]+=costC[i][j]==0?1:0;
}
}
int[] rzerop;
int whilenum=0;
while(true){
boolean[] lzerob=new boolean[pnum]; //記錄某行是否查找過
rzerop=new int[pnum*2]; //記錄0元素所在的行列
Arrays.fill(rzerop, -1);
if(awpIsSolution(costC,pnum,wnum,lzeroa.clone(),lzerob,rzerop))
break;
//下面調整矩陣
int[] coverLC=new int[pnum+wnum]; //要被標記的行列,0-pnum-1為行,pnum以后為列
Arrays.fill(coverLC, -1);
//沒有找到合適0元素的行做標記
for(i=0;ipnum;i++)
if(lzerob[i]==false)coverLC[i]=i;
//對已經標記的行上的0元素所在的列做標記
for(i=0;ipnum;i++)
if(coverLC[i]!=-1){
for(j=0;jwnum;j++){
if(costC[coverLC[i]][j]==0)
coverLC[pnum+j]=j;
}
}
//對已經標記的列上的已經選中的0元素所在的行做標記
for(j=0;jwnum;j++){
if(coverLC[pnum+j]!=-1){
for(i=0;irzerop.lengthrzerop[i]!=-1;i+=2){
if(rzerop[i+1]==j)
coverLC[rzerop[i]]=rzerop[i];
}
}
}
//確定能找出新最小值的區域,直線覆蓋掉沒有打勾的行,打勾的列,最終coverLC[x]!=-1就是能選擇的數
for(i=0;iwnum;i++){
if(coverLC[pnum+i]!=-1)coverLC[pnum+i]=-1;
else coverLC[pnum+i]=i;
}
//從區域中找出最小元素
int nmin=-1;
for(i=0;ipnum;i++){
if(coverLC[i]==-1)continue;
for(j=0;jwnum;j++){
if(coverLC[pnum+j]==-1)continue;
if(nmin==-1)nmin=costC[i][j];
else nmin=nmincostC[i][j]?costC[i][j]:nmin;
}
}
//打勾的列加上nmin,打勾的行減去nmin,記錄0個數的數組作相應變化
for(j=0;jwnum;j++){
if(coverLC[pnum+j]==-1){
for(i=0;ipnum;i++){
if(costC[i][j]==0)lzeroa[i]-=1;
costC[i][j]+=nmin;
}
}
}
for(i=0;ipnum;i++){
if(coverLC[i]!=-1){
for(j=0;jwnum;j++){
costC[i][j]-=nmin;
if(costC[i][j]==0)lzeroa[i]+=1;
}
}
}
whilenum++;
if(whilenum==100){
System.out.println("100次之內矩陣調整沒有找到");
return null;
}
}
return rzerop;
}
/*
* 測試矩陣costC是否有解,已經通過變換或者調整得到的矩陣
*/
public static boolean awpIsSolution(int[][] costC,int pnum,int wnum,int[] lzeroa,boolean[] lzerob,int[] rzerop){
int i,j,rzeropi=0;
for(int p=0;ppnum;p++){ //開始按照匈牙利法劃去0所在的行列
//查找0元素個數最少的行
for(i=0;ipnum;i++){
if(lzerob[i]||lzeroa[i]1)continue; //如果某行已經查找過或者沒有0元素,可能被劃去了
if(lzeroa[pnum]!=-1lzeroa[i]lzeroa[lzeroa[pnum]])lzeroa[pnum]=i;
else if(lzeroa[pnum]==-1) lzeroa[pnum]=i;
}
//沒有找到足夠的不在同一行同一列的0元素,需要對矩陣進行調整,如果lzeroa[pnum]有值,則說明該行一定能找到
if(lzeroa[pnum]==-1){
return false;
}
//劃去找到的行中沒有被覆蓋的0元素所在的行列
for(j=0;jwnum;j++){
if(costC[lzeroa[pnum]][j]!=0)continue;
//第一次找0元素最少的行
if(rzeropi==0){
rzerop[rzeropi++]=lzeroa[pnum];
rzerop[rzeropi++]=j;
lzerob[lzeroa[pnum]]=true; //找到第lzeroa[pnum]行,第j列0元素
//劃去所在的行列時 lzeroa做相應的變化
for(i=0;ipnum;i++){
if(i!=lzeroa[pnum]costC[i][j]==0)
lzeroa[i]-=1;
}
lzeroa[pnum]=-1;
break;
}
//找到的0元素是否被劃去
for(i=0;irzeropi(lzeroa[pnum]!=rzerop[i]j!=rzerop[i+1]);i+=2);
//如果被劃去則找該行下一個0元素
if(irzeropi)continue;
rzerop[rzeropi++]=lzeroa[pnum];
rzerop[rzeropi++]=j;
lzerob[lzeroa[pnum]]=true;
for(i=0;ipnum;i++){
if(i!=lzeroa[pnum]costC[i][j]==0)
lzeroa[i]-=1;
}
lzeroa[pnum]=-1;
break;
}
}
return true;
}
}
運籌學|運籌學真題解析|清華大學運籌學 ?
鏈接: ?
?pwd=a3dh 提取碼: a3dh
運籌學|運籌學真題解析|清華大學運籌學百度網盤?
全國2009年4月高等教育自學考試
運籌學基礎試題
課程代碼:02375
一、單項選擇題(本大題共15小題,每小題1分,共15分)
在每小題列出的四個備選項中只有一個是符合題目要求的,請將其代碼填寫在題后的括號內。錯選、多選或未選均無分。
1.單純形法作為一種常用解法,適合于求解線性規劃( )
A.多變量模型 B.兩變量模型
C.最大化模型 D.最小化模型
2.對科學發展趨勢的預測屬于( )
A.微觀經濟預測 B.宏觀經濟預測
C.科技預測 D.社會預測
3.一般而論,1年內的經濟預測屬于( )
A.長期預測 B.中期預測
C.短期預測 D.定性預測
4.所謂確定條件下的決策,決策者( )
A.不知道將要面對哪些自然狀況
B.知道所面對的部分自然狀況
C.面對的只有一種自然狀況,即關于未來的狀態是完全確定的
D.所面對的是,存在一個以上的自然狀況,而決策者不了解其它狀態,甚至不完全了解如何把概率(可能性)分配給自然狀態
5.可用于風險條件下決策類型的是( )
A.最大最大決策標準 B.最大期望收益值標準
C.最大最小決策標準 D.最小最大遺憾值決策標準
6.在庫存管理中,“訂貨提前期”,亦可稱為( )
A.再訂貨點 B.前置時間
C.前置時間內的需求量 D.經濟訂貨量
7.線性規劃的圖解法適用于( )
A.只含有一個變量的線性規劃問題 B.只含有2~3個變量的線性規劃問題
C.含有多個變量的線性規劃問題 D.任何情況
8.單純形法求解時,若求得的基礎解滿足非負要求,則該基礎解為( )
A.可行解 B.最優解
C.特解 D.可行基解
9.在線性規劃中,設約束方程的個數為m,變量個數為n,m<n時,可以把變量分為基變量和非基變量兩部分,基變量的個數為m個,非基變量的個數為( )
A.m個 B.n個
C.n-m個 D.0個
10.網絡計劃技術是解決哪類管理問題的科學方法?( )
A.組織生產和進行計劃管理 B.環境條件不確定問題
C.具有對抗性局勢競爭問題 D.訂貨與庫存問題
11.在網絡計劃技術中,以結點代表活動,以箭線表示活動之間的先后承接關系,這種圖稱之為( )
A.箭線式網絡圖 B.結點式網絡圖
C.最短路線圖 D.最大流量圖
12.網絡圖中,完成一項活動可能最短的時間,稱為( )
A.作業時間 B.最樂觀時間
C.最保守時間 D.最可能時間
13.在一個網絡中,如果從一個起點出發到所有的點,找出一條或幾條路線,以使在這樣一些路線中所采用的全部支線的總長度最小,這種方法稱之為( )
A.點的問題 B.線的問題
C.樹的問題 D.最小枝叉樹問題
14.任意一個方陣,如果其各行都是概率向量,則該方陣稱之為( )
A.固定概率矩陣 B.馬爾柯夫向量
C.概率向量 D.概率矩陣
15.反映模擬的不足之處的表述是( )
A.模擬是不精確的,它既不是一個最優化過程,也不能得到一個答案
B.實際觀察一個系統可能費用過于昂貴
C.不可能有足夠的時間來實際廣泛地操作該系統
D.由于難于觀察到實際環境,模擬可能是惟一可以利用的方法
二、填空題(本大題共10小題,每小題1分,共10分)
請在每小題的空格中填上正確答案。錯填、不填均無分。
16.運籌學是一門研究如何有效地組織和管理________的科學。
17.預測就是對未來的不確定的事件進行________或判斷。
18.決策就是針對具有明確目標的決策問題,經過調查研究,根據實際與可能,擬定多個________,然后運用統一的標準,選定最佳(或滿意)方案的全過程。
19.庫存的作用最基本的一個方面,就是保證工業企業的生產能夠正常地、________、均衡地進行。
20.線性規劃是一種合理利用資源、合理調配資源的應用數學方法,其基本特點是模型中的目標函數和約束方程都是________。
21.運輸問題是線性規劃問題中一類具有特殊性質的問題,它通過選擇________的運輸方案,以達到總的運輸費用最低或獲得的利潤最大等目標。
22.最小枝杈樹算法是按把最近的未接點連接到那些________上去的辦法來進行的。
23.馬爾柯夫研究發現:許多事物未來的發展或演變,往往受該事物________所支配或影響。
24.盈虧平衡分析是一種管理決策工具,它用來說明在________水平上總銷量與總成本因素之間的關系。
25.模擬又稱________,它的基本思想是構造一個試驗的模型,通過對這個模型的運行,獲得要研究的系統的必要信息和結果。
三、名詞解釋題(本大題共5小題,每小題3分,共15分)
26.定性預測
27.后悔值
28.線性規劃的目標函數
29.階石法中的改進指數
30.活動的極限費用
四、計算題Ⅰ (本大題共3小題,每小題5分,共15分)
寫出下列每小題的計算過程,否則只給結果分。
31.某木材公司銷售房架構件,其中一種構件的銷售數據如題31表。試計算:3個月的滑動平均預測值(直接填在表中相應空欄)。
題31表 某木材公司房架構件的銷售數據
月份 實際銷售額(萬元) 3個月滑動平均預測值
1 10
2 12
3 13
4 16
5 19
6 23
32.某唱片公司計劃錄制一位新歌星的唱片。擬定的價格有A1、A2、A3三個方案,預計唱片進入市場后可能的銷售狀況(自然狀態)也有三種,收益值如題32表。試以最大最大決策標準作出唱片價格的決策選擇。
題32表 某唱片公司錄制新唱片的收益值表 (單位:元)
33.某公司平均每周需求某配件3900臺套,每臺套存貯一年費用為6元,每次訂貨費25元,試求該公司年度最優經濟訂貨批量和全年最佳訂貨次數。
五、計算題 Ⅱ(本大題共3小題,每小題5分,共15分)
寫出下列每小題的計算過程,否則只給結果分。
34.若某工序A由i、j兩結點順序相聯,i結點的最早時間為60(小時),j結點的最遲時間為120(小時),工序A本身需要40小時才能完成。試畫出該工序的箭線式網絡圖,并在圖上填寫出i結點的最遲時間、j結點的最早時間,以及工序A的最早開始和最遲開始時間。
35.某公司擬對新產品生產批量作出決策,現有三種備選方案,未來市場對該產品的需求有兩種可能的自然狀態N1、N2,收益矩陣如題35表。試畫出該問題的決策樹,并以決策樹法作出最優生產決策。
題35表 某公司新產品生產收益矩陣表 (單位:萬元)
36.某公司對過去一年中某種配件的交貨時間統計如題36表,試在表中填寫出累計概率分布和隨機數分布。
題36表 公司交貨時間(周)的累計概率分布及隨機數分布表
交貨時間(周) 頻率(%) 累計概率分布(%) 隨機數分布
1 23
2 45
3 17
4 9
5 6
六、計算題 Ⅲ(本大題共2小題,每小題7分,共14分)
寫出下列每小題的計算過程,否則只給結果分。
37.某企業計劃期內要安排生產甲、乙兩種產品,有關資源消耗及可獲利潤如題37表。該廠要獲得利潤最大化,應如何安排二種產品的生產?建立該問題的線性規劃數學模型并用圖解法求出最優解。
題37表 某企業產品生產的資源消耗與可獲利潤表
產品 甲 乙 資源限量
設備臺時 1臺時/件 1臺時/件 300臺時
原料A 2千克/件 1千克/件 400千克
原料B 0 1千克/件 250千克
預計獲利(元/件) 50 100
38.將題37的線性規劃問題轉換為標準形式,以原點為基礎求出基礎可行解,并建立初始單純形表。
七、計算題Ⅳ(本大題共2小題,每小題8分,共16分)
寫出下列每小題的計算過程,否則只給結果分。
39.某工程有7道工序,工序銜接與有關時間數據如題39表,試繪制網絡圖。
題39表 某工程施工工序資料表
工序名稱 A B C D E F G
緊前工序 - - AB AB B C DE
工序時間 2 4 5 4 3 2 4
40.在你為題39所繪制的網絡圖上標出各結點的時間參數,確定關鍵路線并用雙線(或粗黑線)表示。指明總工期以及A、B、C、D四項活動的最早開始時間。
線性規劃出現的下面語句,options=optimoptions('linprog','algorithm','simplex')是什么意思?
首先,我們對這個語句中的各內容進行說明:
optimoptions——是優化選項函數,對于不同的優化函數,其控制內容是略有區別的
linprog——線性規劃求解函數名;
algorithm——選擇優化算法;系統默認'dual-simplex'(對偶單純形法算法),'interior-point-legacy'(內點傳統算法),它是基于Mehrotra 預測-校正算法 的變體。'interior-point'(內點算法)
simplex——選擇單純形法
所以,這個options優化選項的意思是采用對偶單純形法算法進行線性規劃最優化計算。
根據開始時間分類就行了
model:
sets:
time/1..11/:d;
temp/1..8/:n1;
full/1..3/:n2;
endsets
data:
d=9 9 9 3 3 3 6 12 12 7 7;
enddata
min=@sum(temp:n1);
@sum(full:n2)=4;
@for(temp:@gin(n1));
@for(full:@gin(n2));
@for(time(i):@sum(temp(j)|j#gt#(i-4) #and# j#le#i:n1(j))+@sum(full(k)|k#gt#(i-9) #and# k#ne#(i-4) #and# k#le#i:n2(k))=d(i));
end
網站標題:運籌學課設java代碼,運籌學專業課代碼
分享鏈接:http://vcdvsql.cn/article28/hspicp.html
成都網站建設公司_創新互聯,為您提供域名注冊、服務器托管、網站制作、網站收錄、建站公司、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯