42파일 WorkingDirectory =
신규파일(System.getProperty(
"user.dir"),
"Benders2Stage");
43workingDirectory.mkdir();
50GAMSOptions optData = ws.
추가옵션();
51optData.
정의(
"useBig",
"1");
52optData.defines(
"nrScen",
"100");
60GAMSOptions opt = ws.
추가옵션();
63opt.defines(
"맥시터", Integer.toString(maxiter));
64opt.setAllModelTypes(
"복합체");
76masteri.
인스턴스화(
"lp를 사용하는 masterproblem max zmaster", 선택,
85수비.
인스턴스화(
"LP를 사용하는 하위 문제 최대 zsub", 선택,
91 더블하한 = Double.NEGATIVE_INFINITY, 상한 = Double.POSITIVE_INFINITY, objmaster = Double.POSITIVE_INFINITY;
94System.out.println(
"반복: "+ iter);
97thetaFix.addRecord().setValue( 0 );
103System.out.println(
" 스승님 "+ 마스터리.
getModelStatus() +
" : obj="+ 마스터리.
SyncDB().
get변수(
"zmaster").getFirstRecord().getLevel());
106objmaster = 마스터리.
SyncDB().
get변수(
"z마스터").getFirstRecord().getLevel() - theta.getFirstRecord().getLevel();
111received.addRecord( r.getKeys()).setValue( r.getLevel() );
112cutcoeff.addRecord(
신규String[] Integer.toString(iter), r.getKey(0) );
115cutconst.addRecord(Integer.toString(iter));
120demand.addRecord(j.getKeys()).setValue( 시나리오Data.findRecord(
신규문자열[] s.getKey(0), j.getKey(0)).getValue() );
126 더블확률 = 시나리오Data.findRecord(
신규문자열[] s.getKey(0),
"문제").getValue();
127objsub += 확률 * subi.
SyncDB().
get변수(
"zsub").getFirstRecord().getLevel();
130 더블newValue = 기록.
getValue() + 확률 * 하위.
SyncDB().
getEquation(
"시장").findRecord(j.getKeys()).getMarginal() *demand.findRecord(j.getKeys()).getValue();
132기록 = cutcoeff.findRecord(
신규문자열[] Integer.toString(iter), j.getKey(0));
138하한값 = Math.max(하한값, objmaster + objsub);
144System.out.println(
" 하한값: "+ 하한 +
" 상한: "+ 상한 +
" objmaster: "+ objmaster);
145}
그동안((상한 - 하한) >= 0.001 * (1 + Math.abs(상한)));
153 "j 유통 센터 /d1*d5/ \n"+
156 "capacity(i) 공장의 단위 용량 \n"+
157 " /f1 500, f2 450, f3 650/ \n"+
158 "demand(j) 유통 센터의 단위 수요 \n"+
159 " /d1 160, d2 120, d3 270, d4 325, d5 700 / \n"+
160 "생산 비용 단위 생산 비용 /14/ \n"+
162 "과잉 재고 제품 제거에 따른 낭비 비용 /4/ \n"+
164 "테이블 운송 비용(i,j) 단위 운송 비용 \n"+
165 " d1 d2 d3 d4 d5 \n"+
166 " f1 2.49 5.21 3.76 4.85 2.07 \n"+
167 " f2 1.46 2.54 1.83 1.86 4.76 \n"+
168 " f3 3.26 3.08 2.60 3.76 4.45; \n"+
170 "$ifthen useBig를 설정하지 않았습니다 \n"+
172 " 시나리오 /lo,mid,hi/ \n"+
174 "수요와 확률에 대한 테이블 시나리오 데이터(들,*) 가능한 결과 \n"+
175 " d1 d2 d3 d4 d5 문제 \n"+
176 " lo 150 100 250 300 600 0.25 \n"+
177 " 중간 160 120 270 325 700 0.50 \n"+
178 " 안녕 170 135 300 350 800 0.25; \n"+
180 "$nrScen이 설정되지 않은 경우 $set nrScen 10 \n"+
181 "s 시나리오 세트 /s1*s%nrScen%/;\n"+
182 "수요와 확률에 대한 매개변수 ScenarioData(s,*) 가능한 결과;\n"+
184 "ScenarioData(s,'prob') = 1/카드; \n"+
185 "시나리오데이터(s,j) = 수요(j)*균일(0.6,1.4); \n"+
189 정적문자열 masterModel =
"\n 세트"+
194 " 용량(i) 공장 단위 용량 \n"+
195 " 생산 비용 단위 생산 비용 \n"+
196 " 운송 비용(i,j) 단위 운송 비용 \n"+
198 "$$abort에 데이터가 설정되지 않은 경우 '데이터가 설정되지 않음' \n"+
199 "$gdxin %datain% \n"+
200 "$load i j 용량 생산 비용 거래 비용 \n"+
203 "$if maxiter $set maxiter 25 \n"+
205 " iter max 벤더 반복 /1*%maxiter%/ \n"+
208 " 최적 컷의 cutconst(iter) 상수 \n"+
209 " 최적 컷의 cutcoeff(iter,j) 계수 \n"+
214 " 수령(j) 수량을 시장으로 보냈습니다 \n"+
215 " 마스터 문제의 zmaster 목적 변수 \n"+
220 " masterobj 마스터 목적 함수 \n"+
221 " 생산량(i) 각 공장의 생산량 계산 \n"+
222 " receive(j) 시장에 보낼 수량을 계산합니다 \n"+
223 " optcut(iter) 벤더 최적성 감소; \n"+
226 " zmaster =e= theta -sum((i,j), transcost(i,j)*ship(i,j)) \n"+
227 " - 합계(i,prodcost*제품(i)); \n"+
229 "수신(j).. 수신(j) =e= 합계(i, 선박(i,j)); \n"+
231 "생산(i).. 제품(i) =e= 합계(j, 선박(i,j)); \n"+
232 "product.up(i) = 용량(i); \n"+
234 "optcut(iter).. theta =l= cutconst(iter) + \n"+
235 " sum(j, cutcoeff(iter,j)*수신(j)); \n"+
237 "모델 마스터 문제 /all/; \n"+
240 "cutconst(iter) = 1e15; \n"+
241 "cutcoeff(iter,j) = eps; \n"+
244 정적문자열 하위 모델 =
"\n 세트"+
249 " 수요(j) 유통 센터의 단위 수요 \n"+
251 " 과잉 재고 제품 제거에 따른 낭비 비용 \n"+
252 " 수신됨(j) 1단계 결정 단위 수신됨 \n"+
254 "$$abort에 데이터가 설정되지 않은 경우 '데이터가 설정되지 않음' \n"+
255 "$gdxin %datain% \n"+
256 "$load i j 수요 가격 낭비 비용 \n"+
261 " 판매(j) 판매(실제 판매) \n"+
262 " 폐기물(j) 재고가 과잉된 제품 \n"+
263 " 하위 문제의 zsub 목적 변수 \n"+
267 " subobj 하위 문제 목적 함수 \n"+
268 " 판매(j) 받은 부분이 판매되었습니다 \n"+
273 " zsub =e= sum(j, 가격*판매(j)) - sum(j, wastecost*waste(j)); \n"+
275 "판매(j).. 판매(j) + 폐기물(j) =e= 수령(j); \n"+
277 "시장(j).. 판매(j) =l= 수요(j); \n"+
279 "모델 하위 문제 /subobj,판매,시장/; \n"+