로드 중...
검색 중...
일치하는 항목 없음
transport8.cpp
이 파일의 문서로 이동하세요.
1
25#include "메가 슬롯h"
26#include <벡터>
27#include <뮤텍스>
28#include <스레드>
29#include <iostream>
30
31네임스페이스 사용게임;
32네임스페이스 사용표준;
33
35무효 scenSolve(메가 슬롯작업공간* 으음,메가 슬롯체크포인트* cp, 벡터<더블>* bmultVector, std::mutex* 벡터Mutex, std::mutex* ioMutex)
36{
37unique_lock<mutex> 벡터Lock(*벡터Mutex);
39VectorLock.unlock();
40
41 메가 슬롯매개변수bmult = mi.syncDb().addParameter("bmult", "수요 승수");
43선택.setAllModelTypes("복합체");
44 // GAMSModelInstance를 인스턴스화하고 모델 정의 및 GAMSModifier를 전달하여 bmult 변경 가능 선언
45mi.인스턴스화("운송은 lp min z를 사용합니다", 선택,GAMSModifier(bmult));
46
47b다중.추가기록().세트값(1.0);
48
49 그동안 ()
50{
51 더블b;
52
53 // 생성 시 다른 스레드에 전달하는 대신 벡터에서 bmult 값을 동적으로 가져옵니다.
54VectorLock.lock();
55 if(bmultVector->empty())
56 반환;
57b = bmultVector->back();
58bmultVector->pop_back();
59VectorLock.unlock();
60b다중.첫번째 기록().세트값(b);
61mi.해결();
62
63 // 보고서 정보가 엉망이 되지 않도록 출력을 중요한 섹션으로 만들어야 합니다.
64unique_lock<mutex> ioLock(*ioMutex);
65cout <<"시나리오 bmult="<< b <<":"<< endl;
66cout <<" 모델 상태: "<< 마일.모델상태() << endl;
67cout <<" 해결 상태: "<< 마일.해결상태() << endl;
68cout <<" 개체: "<< 마일.syncDb().get변수("z").findRecord().레벨() << endl;
69ioLock.unlock();
70}
71}
72
74문자열 getModelText()
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}
122
128int 메인(intargc,문자* argv[])
129{
130cout <<"---------- 수송 8 ------------"<< endl;
131
132 시도해 보세요{
133 GAMSWorkspaceInfowsInfo;
134 if(인수 > 1)
135wsInfo.setSystemDirectory(argv[1]);
138
139 // GAMSJob을 실행하여 GAMSCheckpoint 초기화
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
153}잡기 (메가 슬롯예외&ex)
154cout <<"메가 슬롯예외 발생: "<< ex.what() << endl;
155}잡기(예외 &ex)
156cout << ex.what() << endl;
157}
158
159 반환0;
160}
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)
void setSystemDirectory(const std::string &systemDir)
GAMSJob addJobFromString(const std::string &gamsSource, const std::string &jobName="")
GAMSCheckpoint addCheckpoint(const std::string &checkpointName="")
int main(int argc, char *argv[])
void scenSolve(GAMSWorkspace *ws, GAMSCheckpoint *cp, 벡터< double > *bmultVector, std::mutex *VectorMutex, std::mutex *ioMutex)
다양한 시나리오에서 모델을 해결하세요.
string getModelText()
모델을 문자열로 가져옵니다.