로드 중...
검색 중...
일치하는 항목 없음
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]);
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
153}잡기 (슬롯 사이트예외&ex)
154cout <<"슬롯 사이트예외 발생: "<< ex.what() << endl;
155}잡기(예외 &ex)
156cout << ex.what() << endl;
157}
158
159 반환0;
160}
void setSystemDirectory(const std::string &systemDir)
string getModelText()
모델을 문자열로 가져옵니다.

◆ scenSolve()

void scenSolve ( 슬롯 사이트작업공간 * ws,
슬롯 사이트체크포인트 * cp,
벡터< 더블 > * bmultVector,
std::뮤텍스 * 벡터뮤텍스,
std::뮤텍스 * ioMutex )

다양한 시나리오에서 모델을 해결하세요.

라인 정의35파일transport8.cpp.

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();
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}
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::ModelStat 모델상태()
voidsolv(GAMSEnum::SymbolUpdateType updateType, std::ostream &output, const GAMSModelInstanceOpt &miOpt)
슬롯 사이트데이터베이스 syncDb()
void setAllModelTypes(const std::string &solver)
GAMSParameterRecord firstRecord(const std::벡터< std::string > &slice)
GAMSParameterRecord addRecord(const std::벡터< std::string > &keys)
GAMSVariableRecord findRecord(const std::벡터< std::string > &keys)