33#정의된 경우(__unix__) || 정의됨(__linux__) || 정의됨(__APPLE__)
41cout <<
"---------- 수송 9 ------------"<< endl;
42cout <<
"Transport 9는 Microsoft Windows 전용 예입니다."<< endl;
55 "나는 식물을 통조림으로 만들고 있습니다 \n"
59 " a(i) 경우에 따라 공장 i의 용량 \n"
60 " b(j) 경우의 시장 j 수요 \n"
61 " d(i,j) 거리(천 마일 단위) \n"
62 " 스칼라 f 운임(1,000 마일당 케이스당 달러 단위) /90/; \n"
64 "$if가 설정되지 않은 경우 gdxincname $abort '제공된 데이터 파일에 대한 포함 파일 이름 없음' \n"
65 "$gdxin %gdxincname% \n"
69 " 매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ; \n"
71 " c(i,j) = f * d(i,j) / 1000 ; \n"
74 " 케이스의 x(i,j) 배송 수량 \n"
75 " z 총 운송 비용(단위: 수천 달러) ; \n"
81 " 공급(i) 공장 i의 공급 제한 준수 \n"
82 " 수요(j)는 시장 j의 수요를 충족합니다. \n"
84 " 비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ; \n"
86 " 공급(i) .. sum(j, x(i,j)) =l= a(i) ; \n"
88 " 수요(j) .. sum(i, x(i,j)) =g= b(j) ; \n"
92 " z를 최소화하는 lp를 사용하여 전송 문제를 해결합니다. \n"
102 if(!query.exec(strAccessSelect.c_str()))
104cout <<
"'세트에서 쿼리 실행 중 오류 발생'"<< 세트이름 <<
"'"<< endl;
105cout << query.lastError().text().toStdString() << endl;
108 if(query.size() && (query.record().count() != setDim))
110cout <<
"select 문의 필드 수가 setDim과 일치하지 않습니다"<< endl;
115벡터<string> 키 = 벡터<string>(setDim);
119 for (
intidx = 0; idx < setDim; idx++)
120keys[idx] = query.value(idx).toString().toStdString();
129 if(!query.exec(strAccessSelect.c_str()))
131cout <<
"매개변수 '"에 대한 쿼리 실행 중 오류 발생<< par이름 <<
"'"<< endl;
132cout << query.lastError().text().toStdString() << endl;
135 if(query.size() && (query.record().count() != parDim+1))
137cout <<
"select 문의 필드 수가 parDim과 일치하지 않습니다"<< endl;
142벡터<문자열> 키 = 벡터<문자열>(parDim);
146 for (
intidx = 0; idx < parDim; idx++)
147keys[idx] = query.value(idx).toString().toStdString();
148a.
추가기록(키).
세트값(query.value(parDim).toDouble());
157QSqlDatabase sqlDb = QSqlDatabase::addDatabase(
"QODBC",
"readConnection");
159QString strAccessConn = (
"드라이버=Microsoft Access Driver(*.mdb, *.accdb);DSN='';DBQ="+ ws.
시스템디렉토리() \
160+ cPathSep +
"api파일"+ cPathSep +
"데이터"+ cPathSep +
"transport.accdb").c_str();
161sqlDb.setDatabaseName(strAccessConn);
166 readSet(sqlDb, DB,
"식물에서 식물을 선택하세요",
"나", 1,
"통조림 공장");
167 readSet(sqlDb, DB,
"시장에서 시장 선택",
"j", 1,
"시장");
170 readParameter(sqlDb, DB,
"공장 선택,공장에서 생산 능력",
"a", 1,
"케이스에 있는 식물 i의 용량");
171 readParameter(sqlDb, DB,
"시장 선택,시장에서 수요",
"b", 1,
"경우에 따라 시장 j의 수요");
172 readParameter(sqlDb, DB,
"공장,시장,거리 FROM 거리 선택",
"d", 2,
"수천 마일 단위의 거리");
177cout <<
"오류: 데이터베이스 연결 생성에 실패했습니다."<< sqlDb.lastError().text().toStdString() << endl;
187 if(domains.size() !=
static_cast<size_t>(변형.
어두움()))
189cout <<
"열 이름의 수가 변수의 차원과 일치하지 않습니다."<< endl;
195query.exec((
"드롭 테이블 "+ varName).c_str());
197 문자열queryStr =
"테이블 생성"+ varName +
"(";
199queryStr += dom +
" varchar(64), ";
202query.exec(queryStr.c_str());
206queryStr =
""에 삽입하세요+ varName +
"(";
208queryStr += dom +
", ";
209queryStr +=
"lvl) 값 (";
210 for (
문자열키 : rec.keys())
211queryStr +=
"'"+ 키 +
"', ";
212queryStr += std::to_string(rec.level()) +
")";
213 if(!query.exec(queryStr.c_str()))
215cout <<
"오류: 데이터베이스에 변수를 쓰지 못했습니다"<< endl;
216cout << sqlDb.lastError().text().toStdString() << endl;
226QSqlDatabase sqlDb = QSqlDatabase::addDatabase(
"QODBC",
"writeConnection");
228QString strAccessConn = (
"드라이버=Microsoft Access 드라이버(*.mdb, *.accdb);DSN='';DBQ="+ ws.
시스템디렉토리() \
229+ cPathSep +
"api파일"+ cPathSep +
"데이터"+ cPathSep +
"transport.accdb").c_str();
230sqlDb.setDatabaseName(strAccessConn);
235벡터<string> 도메인
"나",
"j"};
241cout <<
"오류: 데이터베이스 연결 생성에 실패했습니다."<< sqlDb.lastError().text().toStdString() << endl;
251int 메인(
intargc,
문자* 인수[])
253cout <<
"---------- 수송 9 ------------"<< endl;
257QCoreApplication 앱(argc, argv);
273cout <<
"x("<< Rec.key(0) <<
","<< Rec.key(1) <<
"):"<<
" 레벨="<< Rec.level() <<
" 한계="
274<< rec.marginal() << endl;
279cout <<
"무료 슬롯예외 발생: "<< ex.what() << endl;
281cout << ex.what() << endl;
GAMSSet addSet(const std::string &name, const int 차원, const std::string &explanatoryText="", GAMSEnum::SetType setType=GAMSEnum::SetType::Multi)
GAMSParameter addParameter(const std::string &name, const int 차원, const std::string &explanatoryText="")
GAMSVariable getVariable(const std::string &name)
void setAllModelTypes(const std::string &solver)
void setDefine(const std::string &key, const std::string &value)
void setValue(const double val)
GAMSParameterRecord addRecord(const std::벡터< std::string > &keys)
GAMSSetRecord addRecord(const std::벡터< std::string > &keys)
void setSystemDirectory(const std::string &systemDir)
std::string systemDirectory() const
GAMSJob addJobFromString(const std::string &gamsSource, const std::string &jobName="")
GAMSDatabase addDatabase(const std::string &databaseName="", const std::string &inModelName="")
int main(int argc, char *argv[])
void writeToAccess(GAMSWorkspace ws, GAMSDatabase db)
MS Access에 GAMSDatabase를 작성합니다.
void readSet(QSqlDatabase sqlDb, GAMSDatabase db, string strAccessSelect, string setName, int setDim, string setExp="")
MS Access에서 GAMSSet을 읽습니다.
void readParameter(QSqlDatabase sqlDb, GAMSDatabase db, string strAccessSelect, string parName, int parDim, string parExp="")
MS Access에서 GAMSParameter를 읽습니다.
void writeVariable(QSqlDatabase sqlDb, GAMSDatabase db, 문자열 varName, 벡터< 문자열 > 도메인)
MS Access에 GAMSVariable을 쓰십시오.
string getModelText()
모델을 문자열로 가져옵니다.
GAMSDatabase readFromAccess(GAMSWorkspace ws)
MS Access에서 GAMSDatabase로 데이터를 읽습니다.