#include #include"ilcplex/ilocplex.h"; #include using namespace std; int main(int, char**) { char ime_instance[20]; cout << "Unesite ime ulazne datoteke (bez ekstenzije, npr. pmed, pcp,itd). Datoteka mora biti u istom folderu."; scanf("%s", ime_instance); char instanca[24]; sprintf(instanca, "%s.txt", ime_instance); ifstream data(instanca); IloEnv env; try { IloModel model(env); //ucitavamo podatke IloInt n, m, p, check; data >> n; //broj korisnika data >> m; //boroj potencijalnih lokacija za centre data >> p; //broj centara koji treba otvoriti IloArrayc(env, n); //ucitavamo matricu rastojanja for (int i = 0; i < n; i++) { c[i] = IloNumArray(env, m); for (int j = 0; j < m; j++) { data >> c[i][j]; } } data >> check; if (!check == 777) cout << "Podaci nisu ucitani kako treba."; //definisemo promenljive modela IloNumVarArray y(env, m, 0, 1, ILOBOOL); IloArray x(env, n); for (int i = 0; i < n; i++) { x[i] = IloNumVarArray(env, m, 0, 1, ILOBOOL); } //definisemo funkciju cilja IloExpr fc(env); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { fc += c[i][j] * x[i][j]; } } model.add(IloMinimize(env, fc)); //definisemo ogranicenja: mora biti tacno p centara IloExpr cond1(env); for (int j = 0; j < m; j++) { cond1 += y[j]; } model.add(cond1 == p); cond1.end(); //definisemo ogranicenja:korisnik ne sme biti pridruzen lokaciji na kojoj nije uspostavljen centar for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { IloExpr cond2(env); cond2 = x[i][j] - y[j]; model.add(cond2 <= 0); cond2.end(); } } //definisemo ogranicenja: svaki korisnik pridruzuje se tacno jednom centru for (int i = 0; i < n; i++) { IloExpr cond3(env); for (int j = 0; j < m; j++) { cond3 += x[i][j]; } model.add(cond3 == 1); cond3.end(); } //resavamo model IloCplex cplex(model); cplex.setOut(env.getNullStream()); if (!cplex.solve()) cout << "Nije nadjeno resenje."; //ispisujemo na standardni izlaz cout << "Vrednost f-je cilja: " << cplex.getObjValue() << endl; cout << "Vreme: " << cplex.getTime() << endl; cout << "Status: " << cplex.getStatus(); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << cplex.getValue(x[i][j]) << " "; } cout << endl; } for (int j = 0; j < m; j++) { cout << cplex.getValue(y[j]) << " "; } cout << endl; //upisujemo rezultate u datoteku char izlazna_datoteka[20]; sprintf(izlazna_datoteka, "%s_resenje.txt", ime_instance); ofstream izlaz(izlazna_datoteka); izlaz << "Resavana je instanca: "<