로드 중...
검색 중...
일치하는 항목 없음
transport6.cpp
이 파일의 문서로 이동하세요.
1
25#include "슬롯 머신h"
26#include <벡터>
27#include <iostream>
28#include <스레드>
29#include <뮤텍스>
30
31네임스페이스 사용게임;
32네임스페이스 사용표준;
33
35무효 runScenario(슬롯 머신작업공간* 으음,const 슬롯 머신체크포인트& cp, 뮤텍스* ioMutex,더블b)
36{
37 자동t6 = ws->addJobFromString("bmult="+ to_string(b) +"; lp를 사용하여 전송 최소 z 해결; ms=transport.modelstat; ss=transport.solvestat;", cp);
38t6.실행();
39
40 // 보고서 정보가 엉망이 되는 것을 방지하기 위해 출력을 중요한 섹션으로 만들어야 합니다.
41lock_guard<mutex> lck(*ioMutex);
42cout <<"시나리오 bmult="<< b <<":"<< endl;
43cout <<" 모델 상태: "<< t6.outDB().getParameter("ms").findRecord().value() << endl;
44cout <<" 해결 상태: "<< t6.outDB().getParameter("ss").findRecord().value() << endl;
45cout <<" 개체: "<< t6.outDB().getVariable("z").findRecord().level() << endl;
46}
47
49문자열 getModelText()
50{
51 반환 "세트 \n"
52 " 나는 식물 통조림 / 시애틀, 샌디에고 / \n"
53 " j 마켓 / 뉴욕, 시카고, 토피카 / ; \n"
54 " \n"
55 "매개변수\n"
56 " \n"
57 " a(i) 경우에 따라 공장 i의 용량 \n"
58 " / 시애틀 350 \n"
59 " 샌디에고 600 / \n"
60 " \n"
61 " b(j) 경우의 시장 j 수요 \n"
62 " / 뉴욕 325 \n"
63 " 시카고 300 \n"
64 " 토피카 275 / ; \n"
65 " \n"
66 "테이블 d(i, j) 거리(천 마일 단위) \n"
67 " 뉴욕 시카고 토피카 \n"
68 " 시애틀 2.5 1.7 1.8 \n"
69 " 샌디에고 2.5 1.8 1.4; \n"
70 " \n"
71 "스칼라 f 운임(1,000 마일당 케이스당 달러 단위 / 90 / ; \n"
72 "스칼라 bmult 수요 승수 / 1 / ; \n"
73 " \n"
74 "매개변수 c(i, j) 운송 비용(케이스당 수천 달러); \n"
75 " \n"
76 "c(i, j) = f * d(i, j) / 1000; \n"
77 " \n"
78 "변수 \n"
79 " x(i, j) 케이스의 배송 수량 \n"
80 " z 총 운송 비용(수천 달러); \n"
81 " \n"
82 "양수 변수 x; \n"
83 " \n"
84 "방정식 \n"
85 " 비용 정의 목적 함수 \n"
86 " 공급(i) 공장 i의 공급 제한 준수 \n"
87 " 수요(j)는 시장 j의 수요를 충족합니다. \n"
88 " \n"
89 "비용 .. z =e= sum((i, j), c(i, j)*x(i, j)); \n"
90 " \n"
91 "공급(i) .. 합계(j, x(i, j)) =l= a(i); \n"
92 " \n"
93 "수요(j) .. sum(i, x(i, j)) =g= bmult*b(j); \n"
94 " \n"
95 "모델 전송 / 모두 / ; \n"
96 "스칼라 ms '모델 상태', ss '상태 해결' \n";
97}
98
99
105int 메인(intargc,문자* 인수[])
106{
107cout <<"---------- 수송 6 ------------"<< endl;
108
109 시도해 보세요{
110 GAMSWorkspaceInfowsInfo;
111 if(인수 > 1)
112wsInfo.setSystemDirectory(argv[1]);
115
116 // GAMSJob을 실행하여 GAMSCheckpoint 초기화
118
119벡터<더블> bmultlist = 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3 ;
120
121 // 생성된 GAMSCheckpoint를 사용하여 여러 병렬 작업 실행
122뮤텍스 ioMutex;
123벡터<스레드> v;
124 for(더블b : b다중 목록)
125v.emplace_back([&ws, cp, &ioMutex, b]runScenario(&ws, cp, &ioMutex, b););
126 for (자동& t : v)
127t.join();
128
129}잡기 (슬롯 머신예외&ex)
130cout <<"슬롯 머신예외 발생: "<< ex.what() << endl;
131}잡기(예외 &ex)
132cout << ex.what() << endl;
133}
134
135 반환0;
136}
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[])
string getModelText()
모델을 문자열로 가져옵니다.
void runScenario(GAMSWorkspace *ws, const GAMSCheckpoint &cp, mutex *ioMutex, double b)
다른 시나리오로 작업을 실행하십시오.