transport12.cpp 파일 참조
이것은 일련의 튜토리얼 예제 중 12번째 모델입니다.더 보기...
#include "슬롯h"#include <알고리즘>#include <iostream>기능 | |
| 문자열 | getModelText () |
| 모델을 문자열로 가져옵니다. | |
| 문자열 | toLower(const string &str) |
| 문자열을 소문자로 변환합니다. | |
| 무효 | GUSS콜 (GAMSSetdict,GAMSModelInstancemi, 문자열solvStatement,슬롯::GAMSOptions*opt=nullptr,슬롯::GAMSModelInstanceOptmiOpt=슬롯::GAMSModelInstanceOpt(), std::ostream *output=nullptr) |
| GUSS를 사용하여 다양한 시나리오에서 모델을 해결합니다. | |
| int | 메인(int argc, char *argv[]) |
자세한 설명
함수 문서
◆ getModelText()
| string getModelText | ( | ) |
모델을 문자열로 가져옵니다.
라인 정의34파일transport12.cpp.
35{
36 반환 " 세트 \n"
37 " i 통조림 식물 / 시애틀, 샌디에이고 / \n"
38 " j 마켓 / 뉴욕, 시카고, 토피카 / ; \n"
39 " \n"
40 " 매개변수 \n"
41 " \n"
42 " a(i) 경우에 따라 공장 i의 용량 \n"
43 " / 시애틀 350 \n"
44 " 샌디에고 600 / \n"
45 " \n"
46 " b(j) 경우의 시장 j 수요 \n"
47 " / 뉴욕 325 \n"
48 " 시카고 300 \n"
49 " 토피카 275 / ; \n"
50 " \n"
51 " 테이블 d(i,j) 거리(천 마일 단위) \n"
52 " 뉴욕 시카고 토피카 \n"
53 " 시애틀 2.5 1.7 1.8 \n"
54 " 샌디에고 2.5 1.8 1.4 ; \n"
55 " \n"
56 " 스칼라 f 운임(1,000 마일당 케이스당 달러 단위) /90/ ; \n"
57 " 스칼라 bmult 수요 승수 /1/; \n"
58 " \n"
59 " 매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ; \n"
60 " \n"
61 " c(i,j) = f * d(i,j) / 1000 ; \n"
62 " \n"
63 " 변수 \n"
64 " x(i,j) 배송 수량 \n"
65 " z 총 운송 비용(수천 달러) ; \n"
66 " \n"
67 " 양수 변수 x ; \n"
68 " \n"
69 " 방정식 \n"
70 " 비용 정의 목적 함수 \n"
71 " 공급(i) i 공장의 공급 제한 준수 \n"
72 " 수요(j)는 시장 j의 수요를 충족시킵니다. \n"
73 " \n"
74 " 비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ; \n"
75 " \n"
76 " 공급(i) .. sum(j, x(i,j)) =l= a(i) ; \n"
77 " \n"
78 " 수요(j) .. sum(i, x(i,j)) =g= bmult*b(j) ; \n"
79 " \n"
80 " 모델 전송 /all/ ; \n";
81}
참조자메인().
◆ GUSS콜()
| GUSSCall 무효 | ( | GAMSSet | dict, |
| GAMSModelInstance | mi, | ||
| 문자열 | solveStatement, | ||
| 슬롯::GAMSOptions * | 선택=nullptr, | ||
| 슬롯::GAMSModelInstanceOpt | miOpt=슬롯::GAMSModelInstanceOpt(), | ||
| std::ostream * | 출력=nullptr ) |
GUSS를 사용하여 다양한 시나리오에서 모델을 해결합니다.
라인 정의92파일transport12.cpp.
96{
97벡터< tuple<GAMSModifier, GAMSParameter> > modifierList;
98
101
102벡터<문자열> 문자열" ", "시나리오", " "};
105
106
109 계속;
112 if(modifierDim < 0)
115dict.database().getParameter(rec.key(2)));
116modifierList.push_back(tuple);
117
120 if(modifierDim < 0)
122
123 슬롯변수modifierVar;
124 시도해 보세요{
126}잡기(...) {
128}
129
133dict.database().getParameter(rec.key(2)));
134modifierList.push_back(tuple);
135
139dict.database().getParameter(rec.key(2)));
140modifierList.push_back(tuple);
141
142}그밖에{// 수정됨
145dict.database().getParameter(rec.key(2)));
146modifierList.push_back(tuple);
147}
149 // GAMSDatabase에 매개변수가 있는지 확인하세요. 없으면 예외가 발생합니다.
150dict.database().getParameter(rec.key(2));
151}그밖에{
153}
154}
155
156벡터<GAMSModifier> mL;
157 for (자동튜플: modifierList)
158mL.push_back(get<0>(튜플));
159 if(선택)
160mi.인스턴스화(solveStatement, *opt, mL);
161 그밖에
162mi.인스턴스화(solveStatement, mL);
163
164벡터<tuple<GAMSSymbol, GAMSParameter, 문자열>> outList;
165
167{
168 for (자동tup : modifierList)
169{
170 슬롯매개변수p;
171 슬롯매개변수pscen = get<1>(tup);
172
173 if(!get<0>(tup).dataSymbol().isValid())
174p = get<0>(tup).gamsSymbol();
175 그밖에
176p = get<0>(tup).dataSymbol();
177
178 // SymbolUpdateType=BaseCase 구현됨
179p.지우기();
180
181 GAMSParameterRecordrec;
182벡터<문자열> 필터(pscen.어두움());
183 for (inti = 0; i < scenSymbol.dim(); 나++)
184필터[i] = s.key(i);
186필터[i] =" ";
187
188 시도해 보세요{
189rec = pscen.첫 번째 레코드(필터);
191 계속;
192}
193
194 할{
195벡터<string> myKeys(p.어두움());
197myKeys[i] = 추천키(scenSymbol.dim()+i);
200}
201
202mi.해결(GAMSEnum::SymbolUpdateType::BaseCase, *output, miOpt);
203
204 if(outList.size() == 0)
210outList.push_back(tuple);
211}
212
213 용(tuple<GAMSSymbol, GAMSParameter, 문자열> tup : outList)
214 GAMSSymbolmySym = get<0>(tup);
215벡터<string> myKeys;
216 for (inti = 0; i < scenSymbol.dim(); 나++)
217myKeys.push_back(s.key(i));
218
222myKeys[scenSymbol.dim() + i] = s.key(i);
223get<1>(tup).addRecord(myKeys).setValue(rec.level());
224}
228myKeys[scenSymbol.dim() + i] = s.key(i);
229get<1>(tup).addRecord(myKeys).setValue(rec.level());
230}
234myKeys[scenSymbol.dim() + i] = s.key(i);
235get<1>(tup).addRecord(myKeys).setValue(rec.marginal());
236}
240myKeys[scenSymbol.dim() + i] = s.key(i);
241get<1>(tup).addRecord(myKeys).setValue(rec.marginal());
242}
243}
244}
245}
246}
GAMSVariable addVariable(const std::string &name, const int 차원, const GAMSEnum::VarType varType, const std::string &explanatoryText="")
GAMSParameter addParameter(const std::string &name, const int 차원, const std::string &explanatoryText="")
GAMSSymbol getSymbol(const std::string &name)
GAMSSet getSet(const std::string &name)
GAMSParameter getParameter(const std::string &name)
GAMSVariable getVariable(const std::string &name)
SymTypeVar
SymTypeEqu
void 인스턴스화(const std::string &modelDefinition, const 슬롯::GAMSOptions &options, const std::Vector< 슬롯::GAMSModifier > &modifiers= )
voidsolv(GAMSEnum::SymbolUpdateType updateType, std::ostream &output, const GAMSModelInstanceOpt &miOpt)
슬롯데이터베이스 syncDb()
void setValue(const double val)
GAMSParameterRecord firstRecord(const std::벡터< std::string > &slice)
GAMSParameterRecord addRecord(const std::벡터< std::string > &keys)
GAMSSetRecord firstRecord(const std::벡터< std::string > &slice)
std::string 키(int 인덱스)
bool moveNext()
std::벡터< std::string > 키()
int 희미() const
슬롯::슬롯데이터베이스 및 데이터베이스() const
GAMSEnum::SymbolType type() const
부울 클리어()
참조자메인().
◆ 메인()
| int 메인 | ( | int | argc, |
| 문자 * | argv[] ) |
라인 정의253파일transport12.cpp.
254{
255cout <<"---------- 수송 12 ------------"<< endl;
256
257 시도해 보세요{
258 GAMSWorkspaceInfowsInfo;
259 if(인수 > 1)
260wsInfo.setSystemDirectory(argv[1]);
261 슬롯작업공간ws(wsInfo);
262 슬롯체크포인트cp = ws.addCheckpoint();
263
264 // GAMSJob을 실행하여 GAMSCheckpoint 초기화
266t12.실행(cp);
267
268 // GAMSModelInstance를 생성하고 다른 스칼라 bmult를 사용하여 여러 번 해결합니다.
270
271 더블bmultlist[] 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3 ;
272
273 슬롯데이터베이스db = ws.addDatabase();
274
278
279 inti = 0;
280 for (더블b : bmultilist)
283}
284
289
290
292
294cout << Rec.key(0) <<" 객체: "<< Rec.value() << endl;
295
297 슬롯데이터베이스db2 = ws.addDatabase();
298
302
303 for (intj = 0; j<4; j++)
308}
309
314
316
318cout << rec.key(0) <<" obj: "<< Rec.value() << endl;
319
321cout <<"슬롯예외 발생: "<< ex.what() << endl;
322}잡다(예외 &ex)
323cout << ex.what() << endl;
324}
325
326 반환0;
327}
GAMSModelInstance addModelInstance(const std::string &modelInstanceName="")
GAMSSet addSet(const std::string &name, const int 차원, const std::string &explanatoryText="", GAMSEnum::SetType setType=GAMSEnum::SetType::Multi)
슬롯데이터베이스 outDB()
void run()
GAMSSetRecord addRecord(const std::벡터< std::string > &keys)
std::string & name() const
void setSystemDirectory(const std::string &systemDir)
void GUSSCall(GAMSSet dict, GAMSModelInstance mi, stringsolvStatement, 슬롯::GAMSOptions *opt=nullptr, 슬롯::GAMSModelInstanceOpt miOpt=슬롯::GAMSModelInstanceOpt(), std::ostream *output=nullptr)
GUSS를 사용하여 다양한 시나리오에서 모델을 해결합니다.
◆ toLower()
| string toLower | ( | 상수 문자열 & | str | ) |
문자열을 소문자로 변환합니다.
라인 정의84파일transport12.cpp.
85{
86 문자열lstr(str);
87transform(lstr.begin(), lstr.end(), lstr.begin(), ::tolower);
88 반환lstr;
89}
참조자GUSS콜().