로드 중...
검색 중...
일치하는 항목 없음
슬롯java
1패키지com.gams.examples.슬롯;
2
3가져오기java.io.파일;
4가져오기java.util.HashMap;
5가져오기java.util.Map;
6
7가져오기 com.감스.API.슬롯예외;
9가져오기 com.게임.API.슬롯글로벌;
11가져오기 com.감스.API.GAMSJob;
12가져오기 com.감스.API.슬롯옵션;
13가져오기 com.게임.API.GAMSVariableRecord;
14가져오기 com.게임.API.슬롯작업공간;
15가져오기 com.게임.API.GAMSWorkspaceInfo;
16
24공개 클래스창고{
25
26 정적 intnumberOfThreads = 16;
27 정적 int상태 = 0;
28
29 공개 정적 공허메인(문자열[] 인수)
30 // 명령줄 인수에서 작업공간 정보 확인
32 if(args.length > 0)
33wsInfo.setSystemDirectory( 인수[0] );
34 // 디렉토리 생성
35파일 WorkingDirectory =신규파일(System.getProperty("user.dir"), "창고");
36workingDirectory.mkdir();
37wsInfo.setWorkingDirectory(workingDirectory.getAbsolutePath());
38 // 작업공간 생성
39 슬롯작업공간ws =신규 슬롯작업공간( wsInfo );
40
41 // 결과에 대한 GAMSDatabase 생성
43결과DB.addParameter("objrep",1,"목표 값");
44결과DB.addSet("공급지도",3,"레벨에 따른 공급 연결");
45
46 시도해 보세요{
47 // 여러 병렬 작업 실행
48개체 dbLock =신규객체();
49Map<String, WarehouseThread> WarehousesMap =신규HashMap<String, WarehouseThread>();
50 for (inti=10; i<=numberOfThreads; 나++)
51창고쓰레드 wh =신규WarehouseThread(ws, i, resultDB, dbLock);
52warehousesMap.put(Integer.toString(i), wh);
53wh.start();
54}
55
56 //모든 스레드에 참여
57 for(WarehouseThread wh : WarehousesMap.values())
58 시도해 보세요{
59wh.join();
60}잡기(InterruptedException e)
61e.printStackTrace();
62}
63}
64
65 // 결과 데이터베이스를 GDX 파일로 내보내기
66결과DB.내보내기(ws.workingDirectory() + GAMSGlobals.FILE_SEPARATOR +"result.gdx");
67}잡기(예외 e)
68e.printStackTrace();
69}마지막으로{
70결과DB.처분();
71}
72
73System.exit(상태);
74}
75
76 공개 정적 무효notifyException(슬롯예외e)
77 if(e 인스턴스GAMSExecutionException)
78상태 = ((GAMSExecutionException)e).getExitCode();
79 그밖에
80상태 = -1;
81}
82
83 정적 클래스창고스레드확장스레드
84 슬롯작업공간작업공간;
86객체 lockObject;
87 int창고 수;
88
89 공개창고스레드(슬롯작업공간ws,int번호,슬롯데이터베이스db, 객체 lockObj)
90작업 공간 = ws;
91numberOfWarehouses = 숫자;
92결과 = db;
93lockObject = lockObj;
94}
95
96 공개 공허실행()
97 시도해 보세요{
98 // GAMSOptions를 인스턴스화하고 일부 스칼라 정의
99GAMSOptions opt = 작업공간.추가옵션();
100선택.setAllModelTypes( "복합체");
101opt.defines("창고", Integer.toString(numberOfWarehouses));
102opt.defines("상점", "65");
103opt.defines("고정", "22");
104opt.defines("분리", "0");
105opt.setOptCR( 0.0 );// 최적으로 해결
106
107 // 문자열에서 GAMSJob을 생성하고 결과 데이터베이스에 결과를 씁니다.
108 GAMSJob직업 = 작업공간.addJobFromString(모델);
109직업.실행(선택, System.out);// job.run(opt);
110
111 // 데이터베이스 쓰기 작업을 잠가야 함
112 동기화됨(lockObject)
113결과.getParameter("objrep").addRecord(Integer.toString(numberOfWarehouses)).setValue( 작업.아웃DB().get변수("obj").findRecord().getLevel() );
114}
115
116 for (GAMSVariableRecordsupplyRec : 직업.아웃DB().get변수("공급")) {
117 if(supplyRec.getLevel() > 0.5)
118 동기화됨(lockObject)
119문자열[] 키 =신규String[] Integer.toString(numberOfWarehouses), SupplyRec.getKey(0), SupplyRec.getKey(1) ;
120결과.getSet("공급지도").addRecord( 키 );
121}
122}
123}잡기 (슬롯예외e)
124e.printStackTrace();
125 창고.notifyException(e) ;
126}
127}
128}
129
130 정적문자열 모델 =
131 "$title 슬롯gms \n" +
132 " \n" +
133 "$eolcom // \n" +
134 "$SetDDList 창고 저장소 고정 분리 // 허용 가능한 정의 \n" +
135 "$창고가 설정되지 않은 경우 $창고 10으로 설정 \n" +
136 "$저장소를 설정하지 않은 경우 $설정 저장 50 \n" +
137 "$설정되지 않은 경우 고정 $set 고정 20 \n" +
138 "$if set not set disaggregate $set disaggregate 1 // 더 엄격한 bigM 제약 조건에 대한 표시 \n" +
139 "$ife %store%<=%슬롯% $abort 매장 수 증가 (>%슬롯) \n" +
140 " \n" +
141 "창고 설정 /w1*w%슬롯% / \n" +
142 " 저장 /s1*s%store% / \n" +
143 "별칭 (창고,w), (상점,s); \n" +
144 "스칼라 \n" +
145 " 창고 개설을 위한 고정 고정 비용 / %fixed% / \n" +
146 "매개변수 \n" +
147 " 용량(슬롯) \n" +
148 " 공급 비용(상점,창고); \n" +
149 " \n" +
150 "$eval storeDIVwarehouse trunc(카드(스토어)/카드(창고)) \n" +
151 "용량(w) = %storeDIVwarehouse% + mod(ord(w),%storeDIVwarehouse%);\n" +
152 "공급 비용(s,w) = 1+mod(ord(s)+10*ord(w), 100); \n" +
153 " \n" +
154 "변수 \n" +
155 " 열기(창고) \n" +
156 " 공급(상점,창고) \n" +
157 "obj; \n" +
158 "이진 변수 열기, 공급; \n" +
159 " \n" +
160 "방정식 \n" +
161 " defobj \n" +
162 " 하나의 창고 \n" +
163 " defopen(w); \n" +
164 " \n" +
165 "defobj.. obj =e= sum(w,fixed*open(w)) + sum((w,s), SupplyCost(s,w)*supply(s,w)); \n" +
166 " \n" +
167 "하나의 창고.. 합계(w, 공급(들,w)) =e= 1; \n" +
168 " \n" +
169 "defopen(w).. sum(s, 공급(s,w)) =l= open(w)*capacity(w); \n" +
170 " \n" +
171 "$ifthen %disaggregate%==1 \n" +
172 "방정식 \n" +
173 " defopen2(s,w); \n" +
174 "defopen2(s,w).. 공급(s,w) =l= 개방(w); \n" +
175 "$endif \n" +
176 " \n" +
177 "모델 분포 /all/; \n" +
178 "Mip를 사용하여 최소 obj 분포를 해결합니다. \n" +
179 "중단$(distrib.solvestat<>%SolveStat.NormalCompletion% 또는 \n" +
180 " distrib.modelstat<>%ModelStat.Optimal% 및 \n" +
181 " distrib.modelstat<>%ModelStat.IntegerSolution%) '해결책 없음!'; \n" +
182 " \n";
183}
GAMSParameter getParameter(문자열 식별자)
GAMSSet addSet(문자열 식별자, 정수 차원)
GAMSParameter addParameter(문자열 식별자, 정수 차원)
GAMSVariable getVariable(문자열 식별자)
GAMSSet getSet(문자열 식별자)
슬롯데이터베이스 OutDB()
void setAllModelTypes(문자열 값)
void setSystemDirectory(문자열 디렉토리)
void setWorkingDirectory(문자열 디렉터리)
GAMSJob addJobFromString(문자열 소스)
슬롯데이터베이스 addDatabase()
이 예는 다양한 용도로 매장을 창고에 할당하는 간단한 슬롯 모델을 해결하는 방법을 보여줍니다...