로드 중...
검색 중...
일치하는 항목 없음
Transport8.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중시스템.텍스트;
4사용 중시스템.IO;
5사용 중System.Threading.Tasks;
6사용 중무료 슬롯;
7사용 중System.Collections;
8
9네임스페이스TransportSeq
10{
19 클래스운송8
20{
21 비공개 정적 공허센솔브(무료 슬롯작업공간ws,무료 슬롯체크포인트cp, 큐<double> bmultQueue, 객체 queueMutex, 객체 ioMutex)
22{
24
25잠금(queueMutex)
26{
27mi = cp.AddModelInstance();
28}
29 무료 슬롯매개변수bmult = mi.SyncDB.매개변수 추가("bmult", "수요 승수");
31opt.AllModelTypes ="복합체";
32 // GAMSModelInstance를 인스턴스화하고 모델 정의 및 GAMSModifier를 전달하여 bmult 변경 가능 선언
33mi.인스턴스화("운송은 lp min z를 사용합니다", 선택,신규 GAMSModifier(bmult));
34
35b다중.AddRecord().= 1.0;
36
37 그동안 ()
38{
39 더블b;
40 // 생성 시 다른 스레드에 전달하는 대신 큐에서 bmult 값을 동적으로 가져옵니다.
41잠금(queueMutex)
42{
43 if(0 == bmultQueue.Count)
44 반환;
45b = bmultQueue.Dequeue();
46}
47b다중.첫번째 기록().=b;
48mi.해결();
49 // 보고서 정보가 엉망이 되지 않도록 출력을 중요한 섹션으로 만들어야 합니다.
50잠금(ioMutex)
51{
52Console.WriteLine("시나리오 bmult="+ b +":");
53Console.WriteLine(" 모델 상태: "+ 마일.모델상태);
54Console.WriteLine(" 해결 상태: "+ 마일.해결 상태);
55Console.WriteLine(" 개체: "+ 마일.SyncDB.GetVariable("z").기록 찾기().레벨);
56}
57}
58}
59
60 정적 공허메인(문자열[] 인수)
61{
63 if(Environment.GetCommandLineArgs().Length > 1)
64ws =신규 무료 슬롯작업공간(systemDirectory: Environment.GetCommandLineArgs()[1]);
65 그밖에
66ws =신규 무료 슬롯작업공간();
68
69 // GAMSJob을 실행하여 GAMSCheckpoint 초기화
70ws.AddJobFromString(GetModelText()).실행(cp);
71
72큐<double> bmultQueue =신규큐<더블>(신규 더블[] { 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3 });
73
74 // 여러 모델 인스턴스를 동시에 해결
75객체 queueMutex =신규객체();
76객체 ioMutex =신규객체();
77Parallel.For(0, 2, 대리자(inti) ScenSolve(ws, cp, bmultQueue, queueMutex, ioMutex); );
78
79}
80
81 정적문자열 GetModelText()
82{
83문자열 모델 =@"
84세트
85i 통조림 공장 / 시애틀, 샌디에이고 /
86j 마켓 / 뉴욕, 시카고, 토피카 / ;
87
88매개변수
89
90a(i) 경우에 따라 공장 i의 용량
91/시애틀 350
92샌디에고 600 /
93
94b(j) 경우에 따라 시장 j의 수요
95/ 뉴욕 325
96시카고 300
97토페카 275 / ;
98
99테이블 d(i,j) 거리(천 마일 단위)
100뉴욕 시카고 토피카
101시애틀 2.5 1.7 1.8
102산디에고 2.5 1.8 1.4 ;
103
104천 마일당 케이스당 달러 단위의 스칼라 f 화물 /90/ ;
105스칼라 bmult 수요 승수 /1/;
106
107매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
108
109c(i,j) = f * d(i,j) / 1000 ;
110
111변수
112x(i,j) 케이스의 배송 수량
113z 총 운송 비용(수천 달러) ;
114
115양수 변수 x ;
116
117수식
118비용 정의 목적 함수
119공급(i) 공장 i의 공급 제한 준수
120수요(j)는 시장 j의 수요를 충족합니다. ;
121
122비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
123
124공급(i) .. 합계(j, x(i,j)) =l= a(i) ;
125
126수요(j) .. sum(i, x(i,j)) =g= bmult*b(j) ;
127
128모델 전송 /all/ ;
129";
130
131 반환모델;
132}
133
134}
135}
GAMSModelInstance AddModelInstance(string modelInstanceName=null)
GAMSVariable GetVariable(문자열 변수 식별자)
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
무료 슬롯데이터베이스 SyncDB
void Solve(SymbolUpdateType 업데이트 유형=SymbolUpdateType.BaseCase, TextWriter 출력=null, GAMSModelInstanceOpt miOpt=null)
void 인스턴스화(문자열 모델 정의, params GAMSModifier[] 수정자)
새 GAMSParameterRecord FirstRecord()
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSVariableRecord FindRecord(params 문자열[] 키)
GAMSJob AddJobFromString(문자열 gamsSource, GAMSCheckpoint 체크포인트=null, 문자열 jobName=null)
GAMSCheckpoint AddCheckpoint(string checkpointName=null)
GAMSOptions AddOptions(GAMSOptions optFrom=null)
이것은 일련의 튜토리얼 예제 중 8번째 모델입니다. 여기에서는 다음을 보여줍니다. 대기열을 사용하여 문제를 해결하는 방법...