Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  non zeros

    Posted 04/06/16 06:01 AM

    Originally posted by: sandeepsinghchauhan


    A is a matrix

                       col1    col2    col3

    A =   row1   4          5         8

            row2   0          5         0

            row3    2         0          0

     

    I want to calculate number of non zeros elements in columns like in col1 number of non zeros are 2 , col2 has 1 and col3 has 2

     

    how can i do in opl


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: non zeros

    Posted 04/06/16 06:27 AM

    Hi

    execute
    {
    writeln(cplex.getNNZs());
    }

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 3.  Re: non zeros

    Posted 04/06/16 07:22 AM

    Originally posted by: sandeepsinghchauhan


    execute
    {

    for(var x in 1..3) {
    NZ[x]  = writeln(cplex.getNNZs(A));
    }

    }

     

    ERROR
    Scripting runtime error: (in getNNZs) too many arguments.  

     

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 4.  Re: non zeros

    Posted 04/07/16 04:02 AM

    Hi,

    no direct way to do that as far as I know.

    You could modify the matrix and compute those numbers by comparing.

    Let me give you an example:

    dvar float+ Gas;
    dvar float+ Chloride;


    maximize
      40 * Gas + 50 * Chloride;
    subject to {
      ctMaxTotal:     
        Gas + Chloride <= 50;
      ctMaxTotal2:    
        3 * Gas + 4 * Chloride <= 180;
      ctMaxChloride:  
        Chloride <= 40;
    }

    tuple SolutionT{
        float Gas;
        float Chloride;
    };
    {SolutionT} Solution = {<Gas,Chloride>};
    execute{
        writeln(Solution);
    }

    execute
    {
    var nnz;

    writeln("NNZ=",nnz=cplex.getNNZs());

    thisOplModel.ctMaxTotal.setCoef(Gas,0);
    thisOplModel.ctMaxTotal2.setCoef(Gas,0);
    thisOplModel.ctMaxChloride.setCoef(Gas,0);

    var nnzGas=nnz-cplex.getNNZs();

    thisOplModel.ctMaxTotal.setCoef(Chloride,0);
    thisOplModel.ctMaxTotal2.setCoef(Chloride,0);
    thisOplModel.ctMaxChloride.setCoef(Chloride,0);

    var nnzChloride=nnz-nnzGas-cplex.getNNZs();

    writeln("NNZ Gas and Chloride = ",nnzGas," ",nnzChloride);

    }

    which gives

    NNZ=5
    NNZ Gas and Chloride = 2 3

    regards

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 5.  Re: non zeros

    Posted 04/19/16 04:56 AM


  • 6.  Re: non zeros

    Posted 04/20/16 06:59 AM

    So with the getters you could write:

    dvar float+ Gas;
    dvar float+ Chloride;


    maximize
      40 * Gas + 50 * Chloride;
    subject to {
      ctMaxTotal:     
        Gas + Chloride <= 50;
      ctMaxTotal2:    
        3 * Gas + 4 * Chloride <= 180;
      ctMaxChloride:  
        Chloride <= 40;
    }

    tuple SolutionT{
        float Gas;
        float Chloride;
    };
    {SolutionT} Solution = {<Gas,Chloride>};
    execute{
        writeln(Solution);
    }

     

    main
    {
    thisOplModel.generate();
    cplex.solve();
    thisOplModel.postProcess();

    var nbNNZGas=(cplex.getCoef(thisOplModel.ctMaxTotal,thisOplModel.Gas)!=0)+
    (cplex.getCoef(thisOplModel.ctMaxTotal2,thisOplModel.Gas)!=0)+
    (cplex.getCoef(thisOplModel.ctMaxChloride,thisOplModel.Gas)!=0);

    var nbNNZChloride=(cplex.getCoef(thisOplModel.ctMaxTotal,thisOplModel.Chloride)!=0)+
    (cplex.getCoef(thisOplModel.ctMaxTotal2,thisOplModel.Chloride)!=0)+
    (cplex.getCoef(thisOplModel.ctMaxChloride,thisOplModel.Chloride)!=0);
    writeln(nbNNZGas);
    writeln(nbNNZChloride);


    }

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer