로드 중...
검색 중...
일치하는 항목 없음
GMSWarehouse.cs
1사용 중시스템;
2사용 중시스템.IO;
3사용 중메가 슬롯;
4
5네임스페이스창고
6{
15 클래스창고
16{
17 비공개 정적 int상태 = 0;
18 비공개 정적 문자열statusString =문자열.비어있음;
19 비공개 정적 무효솔브웨어하우스(메가 슬롯작업공간gmsWS,int창고 수,메가 슬롯데이터베이스결과, 개체 dbMutex)
20{
21 GAMSJobgmsJ = gmsWS.AddJobFromString(GetModelText());
22 시도해 보세요
23{
24 // GAMSOptions를 인스턴스화하고 일부 스칼라 정의
25 메가 슬롯옵션gmsOpt = gmsWS.추가옵션();
26gmsOpt.AllModelTypes ="복합체";
27gmsOpt.정의.추가("창고", NumberOfWarehouses.ToString());
28gmsOpt.정의.추가("상점", "65");
29gmsOpt.정의.추가("고정됨", "22");
30gmsOpt.정의.추가("분리", "0");
31gmsOpt.OptCR = 0.0;// 최적으로 해결
32
33 // 문자열에서 GAMSJob을 생성하고 결과 데이터베이스에 결과를 씁니다.
34gmsJ.실행(gmsOpt);
35
36 // 데이터베이스 쓰기 작업을 잠가야 함
37잠금(dbMutex)
38결과.GetParameter("objrep").AddRecord(NumberOfWarehouses.ToString()).= gmsJ.아웃DB.GetVariable("obj").기록 찾기().레벨;
39
40 foreach (GAMSVariableRecord공급RecingmsJ.아웃DB.GetVariable("공급"))
41 if(supplyRec.레벨> 0.5)
42잠금(dbMutex)
43결과.GetSet("공급지도").AddRecord(NumberOfWarehouses.ToString(), 공급Rec.Key(0), 공급Rec.Key(1));
44}
46{
47 // 사용자가 트리거한 중단이 표시되는지 확인하고 사용자 정의 결과를 찾습니다.
48 if(예.eRC==GAMSExitCode.ExecutionError)
49잠금(dbMutex)
50statusString = gmsJ.아웃DB.GetSet("res").기록 찾기(gmsJ.아웃DB.GetSet("아레스").첫 번째 레코드().키(0)).텍스트;
51잠금(dbMutex)
52상태 = e.iRC;
53}
54 잡기 (메가 슬롯예외e)
55{
56Console.WriteLine(e.Message);
57잠금(dbMutex)
58상태 = -1;
59}
60 잡기(예외 e)
61{
62Console.WriteLine(e.Message);
63잠금(dbMutex)
64상태 = -2;
65}
66}
67
68 정적 공허메인(문자열[] 인수)
69{
71 if(Environment.GetCommandLineArgs().Length > 1)
72gmsWS =신규 메가 슬롯작업공간(systemDirectory: Environment.GetCommandLineArgs()[1]);
73 그밖에
74gmsWS =신규 메가 슬롯작업공간();
75
76 // 결과에 대한 GAMSDatabase 생성
78결과DB.매개변수 추가("objrep",1,"목표 값");
79결과DB.AddSet("공급 지도",3,"레벨에 따른 공급 연결");
80
81 시도해 보세요
82{
83 // 여러 병렬 작업 실행
84개체 dbLock =신규객체();
85System.Threading.Tasks.Parallel.For(10, 22, 대리자(inti) SolveWarehouse(gmsWS, i, resultDB, dbLock); );
86 if(상태 > 0)
87{
88 던지다 신규 GAMSExceptionExecution("메가 슬롯 실행 중 오류: "+ (GAMSExitCode)상태 +" "+ statusString, 상태, gmsWS);
89}
90 그밖에 if(상태 == -1)
91{
92 던지다 신규 메가 슬롯예외("메가 슬롯 API 오류");
93}
94 그밖에 if(상태 == -2)
95{
96 던지기 신규예외();
97}
98 // 결과 데이터베이스를 GDX 파일로 내보내기
99결과DB.내보내기("\\tmp\\result.gdx");
100}
101 잡기 (메가 슬롯예외예)
102{
103Console.WriteLine("메가 슬롯예외 발생: "+ 예: 메시지);
104}
105 잡기(System.Exception ex)
106{
107Console.WriteLine(ex.메시지);
108}
109 마지막으로
110{
111결과DB.폐기();
112}
113
114Environment.ExitCode = 상태;
115}
116
117 정적문자열 GetModelText()
118{
119문자열 모델 =@"
120$title Warehouse.gms
121
122$eolcom //
123$SetDDList 창고 저장소 고정 분리 // 허용 가능 정의
124$창고를 설정하지 않은 경우 $창고를 설정함 10
125$스토어가 설정되지 않은 경우 $set 스토어 50
126$설정되지 않은 경우 고정됨 $set 고정됨 20
127$if set not set disaggregate $set disaggregate 1 // 더 엄격한 bigM 제약 조건에 대한 표시
128$ife %store%<=%warehouse% $abort 매장 수 증가 (>%warehouse)
129
130응답 응답 코드 설정 / 0 일반
1311 라이센스 오류
1322 해결책 없음
1333 기타 오류 /
134ares(res) / 3 /;
135
136창고 설정 /w1*w%warehouse% /
137저장 /s1*s%store% /
138별칭(창고,w), (상점,들);
139스칼라
140창고 개설에 대한 고정 고정 비용 / %fixed% /
141매개변수
142용량(WareHouse)
143공급비용(상점,창고);
144
145$eval storeDIVwarehouse trunc(카드(스토어)/카드(창고))
146용량(w) = %storeDIVwarehouse% + mod(ord(w),%storeDIVwarehouse%);
147공급 비용(s,w) = 1+mod(ord(s)+10*ord(w), 100);
148
149변수
150열기(창고)
151공급(상점,창고)
152obj;
153바이너리 변수 열기, 공급;
154
155수식
156defobj
157하나의 창고
158defopen(w);
159
160defobj.. obj =e= sum(w,fixed*open(w)) + sum((w,s), SupplyCost(s,w)*supply(s,w));
161
162한 창고.. 합계(w, 공급(들,w)) =e= 1;
163
164defopen(w).. sum(s, 공급(s,w)) =l= open(w)*capacity(w);
165
166$ifthen %disaggregate%==1
167수식
168defopen2(s,w);
169defopen2(s,w).. 공급(s,w) =l= 개방(w);
170$endif
171
172모델 분포 /all/;
173mip를 사용하여 distrib min obj를 해결합니다.
174
175$macro setResult(n) 옵션clear=ares; 아레스(n) = 예;
176if (distrib.modelstat=%ModelStat.LicensingProblem% 또는
177distrib.solvestat=%Solvestat.LicensingProblems%,
178setResult('1');
179'라이센스 오류' 중단;
180);
181if (distrib.solvestat<>%SolveStat.NormalCompletion% 또는
182distrib.modelstat<>%ModelStat.Optimal% 및
183distrib.modelstat<>%ModelStat.IntegerSolution%,
184setResult('2');
185'해결책 없음' 중단;
186);
187setResult('0');
188";
189
190 반환모델;
191}
192}
193}
GAMSVariable GetVariable(문자열 변수 식별자)
GAMSSet AddSet(문자열 식별자, int 차원, 문자열 설명Text="", SetType setType=SetType.multi)
GAMSParameter GetParameter(문자열 매개변수 식별자)
GAMSSet GetSet(문자열 setIdentifier)
GAMSParameter AddParameter(문자열 식별자, 정수 차원, 문자열 설명텍스트="")
메가 슬롯데이터베이스 OutDB
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
사전< 문자열, 문자열 > 정의
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord FirstRecord()
새 GAMSSetRecord FindRecord(params 문자열[] 키)
새 GAMSVariableRecord FindRecord(params 문자열[] 키)
GAMSJob AddJobFromString(문자열 gamsSource, GAMSCheckpoint 체크포인트=null, 문자열 jobName=null)
GAMSDatabase AddDatabase(문자열 데이터베이스 이름=null, 문자열 inModelName=null)
GAMSOptions AddOptions(GAMSOptions optFrom=null)