Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void solve() throws IloException {
- cplex = new IloCplex();
- cplex.setOut(null);
- //zmienna przedstawiajace produkcje przez dana fabryke
- IloNumVar[] produkcje = new IloNumVar[2];
- //zmiene przedstawiajace stan magazynow
- IloNumVar[] magazyny = new IloNumVar[2];
- //zmienna przedstawiajaca koszt dostarczenia do klienta
- IloNumVar[] koszt_do_klientow = new IloNumVar[2];
- List<IloConstraint> constraints = new ArrayList<IloConstraint>();
- //INICJALZACJA ZMIENNYCH
- IloIntVar ilosc_z_F1_do_M1 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar ilosc_z_F1_do_K1 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar ilosc_z_F1_do_K2 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar ilosc_z_F2_do_M2 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar ilosc_z_F2_do_K1 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar ilosc_z_M2_do_K1 = cplex.intVar(0, Integer.MAX_VALUE);
- // IloNumVar ilosc_z_F1_do_K2 = cplex.numVar(0, Double.MAX_VALUE);
- IloIntVar ilosc_z_M2_do_K2 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar ilosc_z_M1_do_K2 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar produkcja_F1 = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar produkcja_F2 = cplex.intVar(0, Integer.MAX_VALUE);
- constraints.add(cplex.addGe(150, produkcja_F1));
- constraints.add(cplex.addGe(200, produkcja_F2));
- double koszt_z_M2_K1;
- double koszt_z_M2_do_K2;
- double koszt_z_M1_do_K2;
- double koszt_z_F1_do_K1;
- double koszt_z_F1_do_K2;
- double koszt_z_F2_do_K1;
- IloIntVar f = cplex.boolVar();
- //
- // IloIntVar flagi_dod2 = cplex.boolVar();
- double M1_MAX = 110;
- double M2_MAX = 150;
- // IloNumVar koszt_z_M1_do_K2 = cplex.numVar(0, Double.MAX_VALUE);
- // IloNumVar koszt_z_M2_K1 = cplex.numVar(0, Double.MAX_VALUE);
- // IloNumVar koszt_z_M2_do_K2 = cplex.numVar(0, Double.MAX_VALUE);
- // IloNumVar koszt_z_F1_do_K1 = cplex.numVar(0, Double.MAX_VALUE);
- // IloNumVar koszt_z_F1_do_K2 = cplex.numVar(0, Double.MAX_VALUE);
- // IloNumVar koszt_z_F2_do_K1 = cplex.numVar(0, Double.MAX_VALUE);
- IloNumVar koszt_do_K1 = cplex.numVar(0, Double.MAX_VALUE);
- IloNumVar koszt_do_K2 = cplex.numVar(0, Double.MAX_VALUE);
- IloNumVar koszt = cplex.numVar(0, Double.MAX_VALUE);
- //ograniczenia na ilosci produkcyjne
- IloNumVar ilosc_K1 = cplex.numVar(0, Integer.MAX_VALUE);
- constraints.add(cplex.addEq(130, ilosc_K1));
- IloNumVar ilosc_K2 = cplex.numVar(0, Integer.MAX_VALUE);
- constraints.add(cplex.addEq(90, ilosc_K2));
- //KONIEC
- //NADAWANIE WARTOSCI
- koszt_z_F1_do_K1 = 0.8;
- koszt_z_F2_do_K1 = 1.8;
- koszt_z_M2_K1 = 1.2;
- koszt_z_F1_do_K2 = 1.8;
- koszt_z_M1_do_K2 = 0.9;
- koszt_z_M2_do_K2 = 1.6;
- //KONIEC
- //NADAWANIE KONSTREJNOW
- //ograniczenia na magazyny
- constraints.add(cplex.addGe(M1_MAX, ilosc_z_F1_do_M1));
- constraints.add(cplex.addGe(M2_MAX, ilosc_z_F2_do_M2));
- // produkcja_F1 = ilosc_z_F1_do_M1+ilosc_z_F1_do_K2 + ilosc_z_F1_do_K1;
- //ograniczenie na dostarczenie zF1
- constraints.add(cplex.addGe(produkcja_F1, cplex.sum(cplex.sum(ilosc_z_F1_do_M1, ilosc_z_F1_do_K2), ilosc_z_F1_do_K1)));
- //produkcja_F2 = ilosc_z_F2_do_M2+ilosc_z_F2_do_K1 ;
- //ograniczenie na dostarczenie zF1
- constraints.add(cplex.addGe(produkcja_F2, cplex.sum(ilosc_z_F2_do_M2, ilosc_z_F2_do_K1)));
- // ilosc_K1 = ilosc_z_M2_do_K1 + ilosc_z_F1_do_K1+ilosc_z_F2_do_K1;
- //ograniczenie na zapotrzebowanie k1
- constraints.add(cplex.addEq(ilosc_K1, cplex.sum(cplex.sum(ilosc_z_M2_do_K1, ilosc_z_F1_do_K1), ilosc_z_F2_do_K1)));
- // ilosc_K2 = ilosc_z_F1_do_K2 + ilosc_z_M1_do_K2 + ilosc_z_M2_do_K2;
- //ograniczenie na zapotrzebowanie k2
- constraints.add(cplex.addEq(ilosc_K2, cplex.sum(cplex.sum(ilosc_z_F1_do_K2, ilosc_z_M1_do_K2), ilosc_z_M2_do_K2)));
- // koszt_do_K1 = ilosc_z_M2_do_K1 * koszt_z_M2_K1 + ilosc_z_F1_do_K1*koszt_z_F1_do_K1 + ilosc_z_F2_do_K1*koszt_z_F1_do_K1;
- constraints.add(
- cplex.addEq(
- koszt_do_K1,
- cplex.sum(
- cplex.sum(
- cplex.prod(ilosc_z_M2_do_K1, koszt_z_M2_K1),
- cplex.prod(ilosc_z_F1_do_K1, koszt_z_F1_do_K1)),
- cplex.prod(ilosc_z_F2_do_K1, koszt_z_F2_do_K1))));
- // koszt_do_K2 = ilosc_z_F1_do_K2 * koszt_z_F1_K2 + ilosc_z_M1_do_K2*koszt_z_M1_do_K2 + ilosc_z_M2_do_K2*koszt_z_M2_do_K2;
- constraints.add(cplex.addEq(
- koszt_do_K2,
- cplex.sum(
- cplex.sum(
- cplex.prod(ilosc_z_F1_do_K2, koszt_z_F1_do_K2),
- cplex.prod(ilosc_z_M1_do_K2, koszt_z_M1_do_K2)),
- cplex.prod(ilosc_z_M2_do_K2, koszt_z_M2_do_K2))));
- // koszt_M1 = ilosc_z_F1_do_M1*0.5;//+ dziwnyIF;
- // constraints.add(cplex.addEq(koszt_M1,cplex.prod(ilosc_z_F1_do_K1,0.5)));
- // koszt_M2 = ilosc_z_F1_do_M2+0.3;//+dziwnyIf;
- // constraints.add(cplex.addEq(koszt_M2,cplex.prod(ilosc_z_F2_do_M2,0.3)));
- // koszt = koszt_do_K1 + koszt_do_K2 -koszt_M1-koszt_M2;
- IloNumVar koszt1 = cplex.intVar(0, 10);
- IloNumVar koszt2 = cplex.intVar(0, 10);
- constraints.add(cplex.addEq(
- koszt,
- cplex.diff(
- cplex.sum(koszt_do_K1, koszt_do_K2),
- cplex.sum(
- cplex.prod(ilosc_z_F1_do_M1, 0.5),
- cplex.prod(ilosc_z_F2_do_M2, 0.3)))));
- IloIntVar dupa = cplex.intVar(0, Integer.MAX_VALUE);
- IloIntVar dupa1 = cplex.intVar(0, Integer.MAX_VALUE);
- cplex.add(cplex.ifThen(cplex.ge(ilosc_z_F1_do_M1,88), (cplex.eq(koszt1,10))));
- cplex.add(cplex.ifThen(cplex.le(ilosc_z_F1_do_M1,88), (cplex.eq(koszt1,0))));
- constraints.add(cplex.addEq(dupa, cplex.sum(koszt,koszt1)));
- // boolean d= constraints.add(cplex.ifThen(cplex.ge(ilosc_z_F1_do_M1,60), (cplex.eq(a,10))));
- cplex.add(cplex.ifThen(cplex.ge(ilosc_z_F2_do_M2,120), (cplex.eq(koszt2,10))));
- cplex.add(cplex.ifThen(cplex.le(ilosc_z_F2_do_M2,120), (cplex.eq(koszt2,0))));
- constraints.add(cplex.addEq(dupa1, cplex.sum(dupa,koszt2)));
- //ogRANICZENIA NA ilosc z fabryk do k
- constraints.add(cplex.addEq(ilosc_z_F1_do_M1, ilosc_z_M1_do_K2));
- constraints.add(cplex.addEq(ilosc_z_F2_do_M2, cplex.sum(ilosc_z_M2_do_K1, ilosc_z_M2_do_K2)));
- //constraints.add(cplex.ifThen(cplex.le(ilosc_z_F1_do_M1,160), cplex.eq(a,0)));
- // constraints.add(cplex.addGe(ilosc_z_F1_do_M1, cplex.prod(cplex.diff(1.0,flagi_dod1),-LIMIT)));
- // constraints.add(cplex.addLe(ilosc_z_F1_do_M1, cplex.prod(flagi_dod1,LIMIT)));
- //KONIEC
- cplex.addMinimize(dupa1);
- cplex.setParam(IloCplex.Param.Simplex.Display, 0);
- if (cplex.solve()) {
- System.out.println("koszt calkowity " + cplex.getValue(koszt));
- System.out.println("ilosc_z_F1_do_K1 " + cplex.getValue(ilosc_z_F1_do_K1));
- System.out.println("ilosc_z_F1_do_M1 " + cplex.getValue(ilosc_z_F1_do_M1));
- System.out.println("ilosc_z_F1_do_K2 " + cplex.getValue(ilosc_z_F1_do_K2));
- System.out.println("ilosc_z_F2_do_K1 " + cplex.getValue(ilosc_z_F2_do_K1));
- System.out.println("ilosc_z_F2_do_M2 " + cplex.getValue(ilosc_z_F2_do_M2));
- System.out.println("ilosc_z_M1_do_K2 " + cplex.getValue(ilosc_z_M1_do_K2));
- System.out.println("ilosc_z_M2_do_K2 " + cplex.getValue(ilosc_z_M2_do_K2));
- System.out.println("ilosc_z_M2_do_K1 " + cplex.getValue(ilosc_z_M2_do_K1));
- System.out.println("ilosc_K2 " + cplex.getValue(ilosc_K2));
- System.out.println("ilosc_K1 " + cplex.getValue(ilosc_K1));
- System.out.println("dupa1 " + cplex.getValue(dupa1));
- //System.out.println(d);
- ;
- }
- else{
- System.out.println("Coś nie poszło!");
- System.out.println("Przyczyna: " + cplex.getCplexStatus().toString());
- }
- cplex.end();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement