transportEngine.cpp 파일 참조
이것은 run_engine 메소드를 사용하여 슬롯 무료체험 엔진에서 GAMSJob을 실행하는 방법의 예입니다.더 보기...
#include "슬롯 무료체험h"#include "gamsengineconfiguration.h"#include "gamsvariablerecord.h"#include <cmath>#include <iostream>#include <fstream>#include <파일 시스템>#include <예외>#include <gamspath.h>기능 | |
| int | 메인(int argc, char *argv[]) |
상세 설명
이것은 run_engine 메소드를 사용하여 슬롯 무료체험 엔진에서 GAMSJob을 실행하는 방법의 예입니다.
여기서 보여드리겠습니다:
- 추가 모델 파일을 함께 보내는 방법(메인 파일 외에)
- 추가 엔진 옵션 제공 방법
- run_engine으로 체크포인트를 사용하는 방법
- 슬롯 무료체험 엔진에서 실행 중인 GAMSJob을 중단하는 방법
파일의 정의transportEngine.cpp.
함수 문서
◆ 메인()
| int 메인 | ( | int | argc, |
| 문자 * | argv[] ) |
라인 정의69파일transportEngine.cpp.
76{
77 문자열모델
78R"(
79세트
80나는 통조림 공장
81j 시장;
82
83매개변수
84a(i) 경우에 따라 공장 i의 용량
85b(j) 경우에 따라 시장 j의 수요
86d(i,j) 거리(천 마일)
87천 마일당 케이스당 달러 단위의 스칼라 f 화물
88b다중 수요 승수;
89
90$if 설정되지 않음 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음'
91$gdxLoad %gdxincname% i j a b d f bmult
92
93$echo 테스트 > test.txt
94
95매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
96c(i,j) = f * d(i,j) / 1000 ;
97
98변수
99x(i,j) 케이스의 배송 수량
100z 총 운송 비용(수천 달러) ;
101
102양수 변수 x ;
103
104방정식
105비용 정의 목적 함수
106공급(i) 공장 i의 공급 제한을 준수
107수요(j)는 시장 j의 수요를 충족합니다. ;
108
109비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
110공급(i) .. 합계(j, x(i,j)) =l= a(i) ;
111수요(j) .. sum(i, x(i,j)) =g= bmult*b(j) ;
112
113모델 전송 /all/ ;
114
115z를 최소화하는 lp를 사용하여 전송을 해결합니다.
116
117스칼라 ms '모델 상태', ss '해결 상태';
118
119x.l, x.m 표시 ;
120)"s
121};
122 반환모델;
123}
124
135{
136cout <<"------------ 운송 엔진 ------------"<< endl;
137
138 GAMSWorkspaceInfowsInfo;
139 if(인수 > 1)
140wsInfo.setSystemDirectory(argv[1]);
141 슬롯 무료체험작업공간ws(wsInfo);
142
143파일 시스템::remove(ws.workingDirectory().append("/test.txt"));
144
145 문자열envValues[4] = ;
146
147 문자열envPrefix("엔진_");
148 int색인 = 0;
149 for (const 문자열&id: {"URL", "사용자", "비밀번호", "NAMESPACE"}) {
150
151#ifdef _WIN32
152 문자*버퍼;
153 size_tlen;
154errno_t err = _dupenv_s( &buffer, &len, (envPrefix +id).c_str() );
155 if(err == 0 && 버퍼)
156envValues[index++] = 문자열(버퍼);
157무료(버퍼);
158}그밖에{
159무료(버퍼);
160cerr <<"엔진 없음_"<<id<<" 설정"<< endl;
161 반환-1;
162}
163#else
164 const 문자* 값 = getenv((envPrefix +id).c_str());
165 if(!값)
166cerr <<"엔진 없음_"<<id<<" 설정"<< endl;
167 반환-1;
168}그밖에{
169envValues[index++] = 값;
170}
171#endif
172}
173
174GAMSEngineConfiguration 엔진Conf(envValues[0], envValues[1],
175envValues[2], envValues[3]);
176
177 // GDX 파일로 명시적으로 내보내기와 함께 슬롯 무료체험 구문을 사용하여 문자열의 데이터로 실행
179 슬롯 무료체험옵션defaultOptions = ws.addOptions();
180
181cout <<"실행 1"<< endl;
183jobData.outDB().do내보내기(filesystem::absolute(ws.workingDirectory().append("/tdata.gdx")).string());
184
185map<string, double> ExpectLevels ="seattle.new-york", 0.0 },
186{"seattle.chicago", 300.0 },
187{"seattle.topeka", 0.0 },
188{"san-diego.new-york", 325.0 },
189{"san-diego.chicago", 0.0 },
190{"san-diego.topeka", 275.0 }
191};
192
193
195
196 슬롯 무료체험옵션opt = ws.addOptions();
199
200 // 데이터 포함 파일을 정의하는 GAMSOptions 인스턴스를 사용하여 작업 실행
201cout <<"실행 2"<< endl;
203{
204{"inex_string", "\"유형\": \"포함\", \"파일\": [\"*.gdx\"]"}
205});
206
208cout <<"x("<< Rec.key(0) <<","+ Rec.key(1) <<"): 레벨="<< Rec.level()
209<<"한계="<< Rec.marginal() <<"\n";
210
211 if(expectedLevels.at(rec.key(0).append(".").append(rec.key(1))) != rec.level())
212cout <<"예상치 못한 결과, 예상 수준: "
213<< 예상 레벨.at(rec.key(0).append(".").append(rec.key(1)))
214<< endl;
215 반환1;
216}
217}
218
219 if(filesystem::exists(filesystem::path(ws.workingDirectory()).append("test.txt"))) {
220cout <<"Test.txt를 다시 보내서는 안 됩니다 - inex_string 실패"<< endl;
221 반환1;
222}
223
224 // 동일하지만 암시적 데이터베이스 통신이 있음
225 슬롯 무료체험체크포인트cp = ws.addCheckpoint();
226{
227 슬롯 무료체험옵션opt = ws.addOptions();
230
231cout <<"실행 3"<< endl;
233
236
237cout <<"실행 4"<< endl;
239
241cout <<"x("<< Rec.key(0) <<","+ Rec.key(1) <<"): 레벨="<< Rec.level()
242<<"한계="<< Rec.marginal() <<"\n";
243
244 if(expectedLevels.at(rec.key(0).append(".").append(rec.key(1))) != rec.level())
245cout <<"예상치 못한 결과, 예상 수준: "
246<< 예상 레벨.at(rec.key(0).append(".").append(rec.key(1)))
247<< endl;
248 반환1;
249}
250}
251벡터<map<string, double>> bmultExpected
252{{"bmult", 0.9 }, {"ms", 1 }, {"ss", 1 }, {"obj", 138.31 } },
253{{"bmult", 1.2 }, {"ms", 4 }, {"ss", 1 }, {"obj", 184.41 } }
254};
255
256 for(map<string, double> &m : bmultExpected)
258 + "; lp를 사용하여 전송 최소 z 해결; ms=transport.modelstat; "
259 "ss=transport.solvestat;", cp);
260 시도해 보세요{
261cout <<"실행 5"<< endl;
263cout <<"시나리오 bmult="<< to_string(m["bmult"]) <<":"<< endl;
268cout <<"예기치 않은 입력, 예상되는 bmult: "+ to_string(m["bmult"]) << endl;
269 반환1;
270}
272cout <<"예상치 못한 결과, 예상 ms: "+ to_string(m["ms"]);
273 반환1;
274}
276cout <<"예상치 못한 결과, 예상된 ss: "+ to_string(m["ss"]);
277 반환1;
278}
280cout <<"예상치 못한 결과, 예상된 객체: "+ to_string(m["obj"]);
281 반환1;
282}
283
284}
285 잡기(예외 예)
286cout <<"예외 발생:"<< ex.what() << endl;
287 반환1;
288}
289}
290}
291
292 // 엔진 작업을 중단하는 방법 예
void doExport(const std::string &filePath="")
GAMSParameter getParameter(const std::string &name)
std::문자열 이름()
GAMSVariable getVariable(const std::string &name)
void runEngine(const GAMSEngineConfiguration &engineConfiguration, GAMSOptions *gamsOptions, 슬롯 무료체험::GAMSCheckpoint *checkpoint, std::ostream *output=nullptr, const std::Vector< 슬롯 무료체험::GAMSDatabase > &databases=, const std::set< std::string > &extraModelFiles=, const std::unordered_map< std::string, std::string > &engineOptions=, bool createOutDB=true, bool RemoveResults=true)
슬롯 무료체험데이터베이스 outDB()
void setAllModelTypes(const std::string &solver)
void setDefine(const std::string &key, const std::string &value)
GAMSParameterRecord firstRecord(const std::벡터< std::string > &slice)
GAMSVariableRecord firstRecord(const std::벡터< std::string > &slice)
void setSystemDirectory(const std::string &systemDir)