transport8.cpp 파일 참조
이것은 일련의 튜토리얼 예제 중 8번째 모델입니다.더 보기...
#include "슬롯 사이트h"#include <벡터>#include <뮤텍스>#include <스레드>#include <iostream>기능 | |
| 무효 | scenSolve (슬롯 사이트작업공간*ws,슬롯 사이트체크포인트*cp, 벡터< double > *bmultVector, std::mutex *VectorMutex, std::mutex *ioMutex) |
| 다양한 시나리오에서 모델을 해결하세요. | |
| 문자열 | getModelText () |
| 모델을 문자열로 가져옵니다. | |
| int | 메인(int argc, char *argv[]) |
상세 설명
이것은 일련의 튜토리얼 예제 중 8번째 모델입니다.
여기서 보여드리겠습니다:
- 벡터를 사용하여 여러 GAMSModelInstance를 병렬로 해결하는 방법
파일의 정의transport8.cpp.
함수 문서
◆ getModelText()
| string getModelText | ( | ) |
모델을 문자열로 가져옵니다.
라인 정의74파일transport8.cpp.
75{
76 반환 "\n 세트"
77 " 나는 식물 통조림 / 시애틀, 샌디에고 / \n"
78 " j 마켓 / 뉴욕, 시카고, 토피카 / ; \n"
79 " \n"
80 "매개변수 \n"
81 " \n"
82 " a(i) 경우에 따라 공장 i의 용량 \n"
83 " / 시애틀 350 \n"
84 " 샌디에고 600 / \n"
85 " \n"
86 " b(j) 경우의 시장 j 수요 \n"
87 " / 뉴욕 325 \n"
88 " 시카고 300 \n"
89 " 토피카 275 / ; \n"
90 " \n"
91 "테이블 d(i, j) 거리(천 마일 단위) \n"
92 " 뉴욕 시카고 토피카 \n"
93 " 시애틀 2.5 1.7 1.8 \n"
94 " 샌디에고 2.5 1.8 1.4; \n"
95 " \n"
96 "스칼라 f 운임(1,000마일당 케이스당 달러 단위) / 90 / ; \n"
97 "스칼라 bmult 수요 승수 / 1 / ; \n"
98 " \n"
99 "매개변수 c(i, j) 운송 비용은 케이스당 수천 달러입니다. \n"
100 " \n"
101 "c(i, j) = f * d(i, j) / 1000; \n"
102 " \n"
103 "변수 \n"
104 " x(i, j) 케이스의 배송 수량 \n"
105 " z 총 운송 비용(수천 달러); \n"
106 " \n"
107 "양수 변수 x; \n"
108 " \n"
109 "방정식 \n"
110 " 비용 정의 목적 함수 \n"
111 " 공급(i) i 공장의 공급 제한 준수 \n"
112 " 수요(j)는 시장 j의 수요를 충족합니다. \n"
113 " \n"
114 "비용.. z =e= sum((i, j), c(i, j)*x(i, j)); \n"
115 " \n"
116 "공급(i).. 합계(j, x(i, j)) =l= a(i); \n"
117 " \n"
118 "수요(j).. sum(i, x(i, j)) =g= bmult*b(j); \n"
119 " \n"
120 "모델 전송 / 모두 / ; \n";
121}
참조자메인().
◆ 메인()
| int 메인 | ( | int | argc, |
| 문자 * | argv[] ) |
라인 정의128파일transport8.cpp.
129{
130cout <<"---------- 수송 8 ------------"<< endl;
131
132 시도해 보세요{
133 GAMSWorkspaceInfowsInfo;
134 if(인수 > 1)
135wsInfo.setSystemDirectory(argv[1]);
136 슬롯 사이트작업공간ws(wsInfo);
137 슬롯 사이트체크포인트cp = ws.addCheckpoint();
138
139 // GAMSJob을 실행하여 GAMSCheckpoint 초기화
140ws.addJobFromString(getModelText()).run(cp);
141
142벡터<더블> bmultVector = 1.3, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 0.6 ;
143 intnr스레드 = 2;
144 // 여러 모델 인스턴스를 병렬로 해결
145std::mutex 벡터Mutex;
146std::mutex ioMutex;
147벡터<스레드> v;
148 for (inti = 0; i < nrThreads; 나++)
149v.emplace_back([&ws, &cp, &bmultVector, &VectorMutex, &ioMutex] scenSolve(&ws, &cp, &bmultVector, &VectorMutex, &ioMutex););
150 for (자동& t : v)
151t.join();
152
154cout <<"슬롯 사이트예외 발생: "<< ex.what() << endl;
155}잡기(예외 &ex)
156cout << ex.what() << endl;
157}
158
159 반환0;
160}
void setSystemDirectory(const std::string &systemDir)
◆ scenSolve()
| void scenSolve | ( | 슬롯 사이트작업공간 * | ws, |
| 슬롯 사이트체크포인트 * | cp, | ||
| 벡터< 더블 > * | bmultVector, | ||
| std::뮤텍스 * | 벡터뮤텍스, | ||
| std::뮤텍스 * | ioMutex ) |
다양한 시나리오에서 모델을 해결하세요.
라인 정의35파일transport8.cpp.
36{
37unique_lock<mutex> 벡터Lock(*벡터Mutex);
39VectorLock.unlock();
40
44 // GAMSModelInstance를 인스턴스화하고 모델 정의 및 GAMSModifier를 전달하여 bmult 변경 가능 선언
46
48
49 그동안 (참)
50{
51 더블b;
52
53 // 생성 시 다른 스레드에 전달하는 대신 벡터에서 bmult 값을 동적으로 가져옵니다.
54VectorLock.lock();
55 if(bmultVector->empty())
56 반환;
57b = bmultVector->back();
58bmultVector->pop_back();
59VectorLock.unlock();
61mi.해결();
62
63 // 보고서 정보가 엉망이 되지 않도록 출력을 중요한 섹션으로 만들어야 합니다.
64unique_lock<mutex> ioLock(*ioMutex);
65cout <<"시나리오 bmult="<< b <<":"<< endl;
69ioLock.unlock();
70}
71}
GAMSModelInstance addModelInstance(const std::string &modelInstanceName="")
GAMSParameter addParameter(const std::string &name, const int 차원, const std::string &explanatoryText="")
GAMSVariable getVariable(const std::string &name)
void 인스턴스화(const std::string &modelDefinition, const 슬롯 사이트::GAMSOptions &options, const std::Vector< 슬롯 사이트::GAMSModifier > &modifiers= )
GAMSEnum::SolveStatsolvStatus()
GAMSEnum::ModelStat 모델상태()
voidsolv(GAMSEnum::SymbolUpdateType updateType, std::ostream &output, const GAMSModelInstanceOpt &miOpt)
슬롯 사이트데이터베이스 syncDb()
void setAllModelTypes(const std::string &solver)
void setValue(const double val)
GAMSParameterRecord firstRecord(const std::벡터< std::string > &slice)
GAMSParameterRecord addRecord(const std::벡터< std::string > &keys)
GAMSVariableRecord findRecord(const std::벡터< std::string > &keys)
GAMSOptions addOptions()