Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Multiple warmstart in on model

    Posted 02/15/19 09:48 AM

    Originally posted by: Nomykan


    Hi, 

    is it possible to provide multiple warm start values in one model? i am trying to provide two warm start values for two different decision variables in the flow control. what i am doing is like this 

        var vectors = new IloOplCplexVectors();
        var vectors2 = new IloOplCplexVectors();
        
        vectors.attach(opl3.UC,opl1.UC.solutionValue);
        vectors2.attach(opl3.status,opl2.status.solutionValue);
        
        vectors.setStart(cplex);
        vectors2.setStart(cplex);
        
     Is this the correct way for multiple warm start solutions? if not then how should we do that? i am only getting one solution in the engine tab. 

    CPXPARAM_MIP_Strategy_CallbackReducedLP          0
    Presolve time = 0.06 sec. (44.45 ticks)
    1 of 1 MIP starts provided solutions.
    MIP start 'm1' defined initial solution with objective 3105657.7022.
    Tried aggregator 4 times.
     

    Help in this regard will be highly appreciated. Thanks


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: Multiple warmstart in on model

    Posted 02/16/19 12:12 AM

    Hi

    in

    https://www.linkedin.com/pulse/making-decision-optimization-simple-alex-fleischer/

    I wrote a very tiny warm start example

    https://www.ibm.com/developerworks/community/forums/html/topic?id=75766584-44c5-4400-977f-03363feea776

    Let s start from there.

    And change that so that you have 2 warm starts:

    .mod

     int nbKids=300;

    // a tuple is like a struct in C, a class in C++ or a record in Pascal
    tuple bus
    {
     key int nbSeats;
     float cost;
    }


    // This is a tuple set
    {bus} pricebuses=...;

    // asserts help make sure data is fine
    assert forall(b in pricebuses) b.nbSeats>0;assert forall(b in pricebuses) b.cost>0;


    // To compute the average cost per kid of each bus
    // you may use OPL modeling language

    float averageCost[b in pricebuses]=b.cost/b.nbSeats;

    // Let us try first with a naïve computation, use the cheapest bus

    float cheapestCostPerKid=min(b in pricebuses) averageCost[b];
    int cheapestBusSize=first({b.nbSeats | b in pricebuses : averageCost[b]==cheapestCostPerKid});
    int nbBusNeeded=ftoi(ceil(nbKids/cheapestBusSize));

    float cost0=item(pricebuses,<cheapestBusSize>).cost*nbBusNeeded;
    execute DISPLAY_Before_SOLVE
    {
      writeln("The naïve cost is ",cost0);
      writeln(nbBusNeeded," buses ",cheapestBusSize, " seats");
      writeln();
    }

    int naiveSolution[b in pricebuses]=
      (b.nbSeats==cheapestBusSize)?nbBusNeeded:0;
     
    int emptySolution[b in pricebuses]=
      0;


    // decision variable array
    dvar int+ nbBus[pricebuses];

    // objective
    minimize
      sum(b in pricebuses) b.cost*nbBus[b];
         
    // constraints
    subject to
    {
      sum(b in pricebuses) b.nbSeats*nbBus[b]>=nbKids;
    }

    float cost=sum(b in pricebuses) b.cost*nbBus[b];
    execute DISPLAY_After_SOLVE
    {
     writeln("The minimum cost is ",cost);
     for(var b in pricebuses) writeln(nbBus[b]," buses ",b.nbSeats, " seats");

    }


    main
    {
    thisOplModel.generate();
    // Warm start the naïve solution
    cplex.addMIPStart(thisOplModel.nbBus,thisOplModel.naiveSolution);
    cplex.addMIPStart(thisOplModel.nbBus,thisOplModel.emptySolution);
    cplex.solve();
    thisOplModel.postProcess();
    }

    .dat

    pricebuses={<40,500>,<30,400>};

    and then in the cplex log you ll see

    1 of 2 MIP starts provided solutions.
    MIP start 'm1' defined initial solution with objective 4000.0000.

    regards

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer