Decision Optimization

Decision Optimization

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

 View Only
Expand all | Collapse all

Create array of tuples

  • 1.  Create array of tuples

    Posted Thu July 05, 2018 11:02 AM

    Originally posted by: labrecheMustapha


    Hi,

    i have this code in my .mod file :

    tuple Structures {
    int i;
    float failure_probability_threshold; 
    int failure_probability_value_category;
    string h;
    int consequence_economic; 
    string consequence_category; 
    string risk_category;
    }

    float scales_failure[1..2][l in Inspection_technic] = ...;

    {Structures} structure = ...;

    int consequence_economic[i in Cities] = sum(s in structure : s.i == i) s.consequence_economic; 
    float failure_probability_threshold[i in Cities]= sum(s in structure : s.i == i) s.failure_probability_threshold; 
    int prec[i in Cities][j in Cities] = consequence_economic[i] >= consequence_economic[j] ? 1 : 0;
    int bes[i in Cities][l in Inspection_technic] = scales_failure[1][l] <= failure_probability_threshold[i] <= scales_failure[2][l] ? 1 : 0;

     

    and my .dat:

    n= 30;
    m= 4;
    p=4;
    Inspection_technic = {"Visuelle" , "Technique", "Approfondie", "Reparation"};
    State_health = {"Classe 0", "Classe 1" , "Classe 2", "Classe 2E", "Classe 3", "Classe 3U"};
    subtours = {};
    c_distance=0.01;

    scales_failure=[[0.05, 0.2,0.5,0.7],[0.2, 0.5,0.7,0.9]];

    c_inspection=[100, 300, 500, 2000];

    structure = {
    <1,0,0,"CLASSE 0",0,A,"Faible">
    <2,0.549,3,"CLASSE 2U",5399672,E,"Élevé">
    <3,0.237,2,"CLASSE 2",1844971,E,"Moyennement élevé">
    <4,0.520,3,"CLASSE 2U",67445,E,"Élevé">
    <5,0.187,1,"CLASSE 1",7040844,E,"Moyennement élevé">
    <6,0.560,3,"CLASSE 2U",135904,E,"Élevé">
    <7,0.674,4,"CLASSE 3",3418454,E,"Élevé">
    <8,0.301,2,"CLASSE 2",9091194,E,"Moyennement élevé">
    <9,0.699,4,"CLASSE 3",2870781,E,"Élevé">
    <10,0.719,4,"CLASSE 3",4715930,E,"Élevé">
    <11,0.467,3,"CLASSE 2U",544605,E,"Élevé">
    <12,0.212,2,"CLASSE 2",4098,E,"Moyennement élevé">
    <13,0.326,2,"CLASSE 2",374880,E,"Moyennement élevé">
    <14,0.582,3,"CLASSE 2U",5379487,E,"Élevé">
    <15,0.105,1,"CLASSE 1",7054188,E,"Moyennement élevé">
    <16,0.703,4,"CLASSE 3",33695,E,"Élevé">
    <17,0.457,3,"CLASSE 2U",6062818,E,"Élevé">
    <18,0.641,4,"CLASSE 3",956381,E,"Élevé">
    <19,0.295,2,"CLASSE 2",2003578,E,"Moyennement élevé">
    <20,0.420,3,"CLASSE 2U",482416,E,"Élevé">
    <21,0.512,3,"CLASSE 2U",1010892,E,"Élevé">
    <22,0.681,4,"CLASSE 3",1992696,E,"Élevé">
    <23,0.651,4,"CLASSE 3",131125,E,"Élevé">
    <24,0.467,3,"CLASSE 2U",899181,E,"Élevé">
    <25,0.540,3,"CLASSE 2U",8044070,E,"Élevé">
    <26,0.748,4,"CLASSE 3",360487,E,"Élevé">
    <27,0.720,4,"CLASSE 3",9885913,E,"Élevé">
    <28,0.659,4,"CLASSE 3",602125,E,"Élevé">
    <29,0.104,1,"CLASSE 1",131017,E,"Moyennement élevé">
    <30,0.614,4,"CLASSE 3",3117981,E,"Élevé">};

     

    I want to create array of tuple "structure", each tuple correspond to a periode cause in each periode there is an evolution of the parameters for exemple this is the set of all tuples that i want to get : 

     

    structure = {
    <1,0,0,"CLASSE 0",0,A,"Faible">
    <2,0.549,3,"CLASSE 2U",5399672,E,"Élevé">
    <3,0.237,2,"CLASSE 2",1844971,E,"Moyennement élevé">
    <4,0.520,3,"CLASSE 2U",67445,E,"Élevé">
    <5,0.187,1,"CLASSE 1",7040844,E,"Moyennement élevé">
    <6,0.560,3,"CLASSE 2U",135904,E,"Élevé">
    <7,0.674,4,"CLASSE 3",3418454,E,"Élevé">
    <8,0.301,2,"CLASSE 2",9091194,E,"Moyennement élevé">
    <9,0.699,4,"CLASSE 3",2870781,E,"Élevé">
    <10,0.719,4,"CLASSE 3",4715930,E,"Élevé">
    <11,0.467,3,"CLASSE 2U",544605,E,"Élevé">
    <12,0.212,2,"CLASSE 2",4098,E,"Moyennement élevé">
    <13,0.326,2,"CLASSE 2",374880,E,"Moyennement élevé">
    <14,0.582,3,"CLASSE 2U",5379487,E,"Élevé">
    <15,0.105,1,"CLASSE 1",7054188,E,"Moyennement élevé">
    <16,0.703,4,"CLASSE 3",33695,E,"Élevé">
    <17,0.457,3,"CLASSE 2U",6062818,E,"Élevé">
    <18,0.641,4,"CLASSE 3",956381,E,"Élevé">
    <19,0.295,2,"CLASSE 2",2003578,E,"Moyennement élevé">
    <20,0.420,3,"CLASSE 2U",482416,E,"Élevé">
    <21,0.512,3,"CLASSE 2U",1010892,E,"Élevé">
    <22,0.681,4,"CLASSE 3",1992696,E,"Élevé">
    <23,0.651,4,"CLASSE 3",131125,E,"Élevé">
    <24,0.467,3,"CLASSE 2U",899181,E,"Élevé">
    <25,0.540,3,"CLASSE 2U",8044070,E,"Élevé">
    <26,0.748,4,"CLASSE 3",360487,E,"Élevé">
    <27,0.720,4,"CLASSE 3",9885913,E,"Élevé">
    <28,0.659,4,"CLASSE 3",602125,E,"Élevé">
    <29,0.104,1,"CLASSE 1",131017,E,"Moyennement élevé">
    <30,0.614,4,"CLASSE 3",3117981,E,"Élevé">,

    <1,0,0,"CLASSE 0",0,A,"Faible">
    <2,0.579,3,"CLASSE 2U",5831645,E,"Élevé">
    <3,0.257,2,"CLASSE 2",1955669,D,"Moyen">
    <4,0.574,3,"CLASSE 2U",71492,B,"Faible">
    <5,0.208,2,"CLASSE 2",7604111,E,"Moyennement élevé">
    <6,0.599,3,"CLASSE 2U",142699,C,"Moyen">
    <7,0.721,4,"CLASSE 3",3726115,D,"Moyennement élevé">
    <8,0.325,2,"CLASSE 2",9545754,E,"Moyennement élevé">
    <9,0.756,4,"CLASSE 3",3129151,D,"Moyennement élevé">
    <10,0.785,4,"CLASSE 3",4951727,D,"Moyennement élevé">
    <11,0.504,3,"CLASSE 2U",571835,C,"Moyen">
    <12,0.226,2,"CLASSE 2",4385,A,"Faible">
    <13,0.368,2,"CLASSE 2",397373,C,"Moyen">
    <14,0.623,4,"CLASSE 3",5648461,E,"Élevé">
    <15,0.115,1,"CLASSE 1",7406898,E,"Moyennement élevé">
    <16,0.797,4,"CLASSE 3",36391,B,"Moyen">
    <17,0.487,3,"CLASSE 2U",6487215,E,"Élevé">
    <18,0.675,4,"CLASSE 3",1023327,D,"Moyennement élevé">
    <19,0.313,2,"CLASSE 2",2163864,D,"Moyen">
    <20,0.462,3,"CLASSE 2U",511361,C,"Moyen">
    <21,0.544,3,"CLASSE 2U",1091764,D,"Moyennement élevé">
    <22,0.736,4,"CLASSE 3",2152111,D,"Moyennement élevé">
    <23,0.737,4,"CLASSE 3",141615,C,"Moyennement élevé">
    <24,0.529,3,"CLASSE 2U",980107,C,"Moyen">
    <25,0.609,4,"CLASSE 3",8768037,E,"Élevé">
    <26,0.852,5,"CLASSE 3E",385722,C,"Moyennement élevé">
    <27,0.779,4,"CLASSE 3",1038020,E,"Élevé">
    <28,0.723,4,"CLASSE 3",644274,C,"Moyennement élevé">
    <29,0.117,1,"CLASSE 1",138878,C,"Moyen">
    <30,0.675,4,"CLASSE 3",3305059,D,"Moyennement élevé">,

    <1,0,0,"CLASSE 0",0,A,"Faible">
    <2,0.643,4,"CLASSE 3",5993636,E,"Élevé">
    <3,0.300,2,"CLASSE 2",2047918,D,"Moyen">
    <4,0.635,4,"CLASSE 3",72166,B,"Moyen">
    <5,0.224,2,"CLASSE 2",7674520,E,"Moyennement élevé">
    <6,0.719,4,"CLASSE 3",149495,C,"Moyennement élevé">
    <7,0.803,5,"CLASSE 3E",3657746,D,"Élevé">
    <8,0.357,2,"CLASSE 2",9727578,E,"Moyennement élevé">
    <9,0.902,5,"CLASSE 3E",3157859,D,"Élevé">
    <10,0.804,5,"CLASSE 3E",5093204,E,"Élevé">
    <11,0.542,3,"CLASSE 2U",582727,C,"Moyen">
    <12,0.272,2,"CLASSE 2",4426,A,"Faible">
    <13,0.373,2,"CLASSE 2",412368,C,"Moyen">
    <14,0.699,4,"CLASSE 3",5863641,E,"Élevé">
    <15,0.127,1,"CLASSE 1",7759607,E,"Moyennement élevé">
    <16,0.888,5,"CLASSE 3E",36728,B,"Moyennement élevé">
    <17,0.555,3,"CLASSE 2U",6487215,E,"Élevé">
    <18,0.756,4,"CLASSE 3",1042455,D,"Moyennement élevé">
    <19,0.352,2,"CLASSE 2",2163864,D,"Moyen">
    <20,0.517,3,"CLASSE 2U",516185,C,"Moyen">
    <21,0.624,4,"CLASSE 3",1091764,D,"Moyennement élevé">
    <22,0.840,5,"CLASSE 3E",2172038,D,"Élevé">
    <23,0.762,4,"CLASSE 3",144237,C,"Moyennement élevé">
    <24,0.530,3,"CLASSE 2U",971115,C,"Moyen">
    <25,0.612,4,"CLASSE 3",8607155,E,"Élevé">
    <26,0.912,5,"CLASSE 3E",385722,C,"Moyennement élevé">
    <27,0.912,5,"CLASSE 3E",1067678,E,"Élevé">
    <28,0.773,4,"CLASSE 3",662337,C,"Moyennement élevé">
    <29,0.129,1,"CLASSE 1",141499,C,"Moyen">
    <30,0.747,4,"CLASSE 3",3429779,D,"Moyennement élevé">,

    <1,0,0,"CLASSE 0",0,A,"Faible">
    <2,0.757,4,"CLASSE 3",5939639,E,"Élevé">
    <3,0.318,2,"CLASSE 2",2047918,D,"Moyen">
    <4,0.662,4,"CLASSE 3",74190,B,"Moyen">
    <5,0.249,2,"CLASSE 2",7674520,E,"Moyennement élevé">
    <6,0.738,4,"CLASSE 3",152213,C,"Moyennement élevé">
    <7,0.874,5,"CLASSE 3E",3794484,D,"Élevé">
    <8,0.383,2,"CLASSE 2",1009122,E,"Moyennement élevé">
    <9,0.948,5,"CLASSE 3E",3215275,D,"Élevé">
    <10,0.985,5,"CLASSE 3E",5281842,E,"Élevé">
    <11,0.579,3,"CLASSE 2U",593619,C,"Moyen">
    <12,0.276,2,"CLASSE 2",4467,A,"Faible">
    <13,0.452,3,"CLASSE 2U",416117,C,"Moyen">
    <14,0.775,4,"CLASSE 3",5863641,E,"Élevé">
    <15,0.140,1,"CLASSE 1",7900691,E,"Moyennement élevé">
    <16,0.918,5,"CLASSE 3E",36391,B,"Moyennement élevé">
    <17,0.611,4,"CLASSE 3",6729728,E,"Élevé">
    <18,0.821,5,"CLASSE 3E",1052019,D,"Élevé">
    <19,0.389,2,"CLASSE 2",2183900,D,"Moyen">
    <20,0.517,3,"CLASSE 2U",540306,C,"Moyen">
    <21,0.683,4,"CLASSE 3",1122090,D,"Moyennement élevé">
    <22,0.837,5,"CLASSE 3E",2191965,D,"Élevé">
    <23,0.859,5,"CLASSE 3E",144237,C,"Moyennement élevé">
    <24,0.657,4,"CLASSE 3",989099,C,"Moyennement élevé">
    <25,0.703,4,"CLASSE 3",8687596,E,"Élevé">
    <26,0.958,5,"CLASSE 3E",396536,C,"Moyennement élevé">
    <27,0.904,5,"CLASSE 3E",1087450,E,"Élevé">
    <28,0.868,5,"CLASSE 3E",662337,C,"Moyennement élevé">
    <29,0.135,1,"CLASSE 1",142809,C,"Moyen">
    <30,0.784,4,"CLASSE 3",3460958,D,"Moyennement élevé">
    };

     

    And i want to insert the periode in this parametrs 

    int consequence_economic[i in Cities] = sum(s in structure : s.i == i) s.consequence_economic; 
    float failure_probability_threshold[i in Cities]= sum(s in structure : s.i == i) s.failure_probability_threshold; 
    int prec[i in Cities][j in Cities] = consequence_economic[i] >= consequence_economic[j] ? 1 : 0;
    int bes[i in Cities][l in Inspection_technic] = scales_failure[1][l] <= failure_probability_threshold[i] <= scales_failure[2][l] ? 1 : 0;


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Create array of tuples

    Posted Thu July 05, 2018 11:46 AM

    Hi,

    you can write array of tuple.

    tuple t
    {
    int a;
    string b;
    }

    t myArray[1..2]=[<1,"A">,<2,"B">];

    execute
    {
    writeln(myArray);
    }

    And you can also transform tuple set into array :

    https://www.ibm.com/developerworks/community/forums/html/topic?id=182a2977-89ac-48ac-9e3b-c4cf62434166&ps=25

    regards


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Create array of tuples

    Posted Thu July 05, 2018 12:00 PM

    Originally posted by: labrecheMustapha


    Hi,

    i did this : Structures structureArray[1..n][1..p]=...;

    cause i want to have for each city p tuples but this is the error that i get : "Tuple de données inattendu pour "Structures[range][range]"

    so at final i want to have n*p tuples in order to acces into every parameters of each tuple.

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Create array of tuples

    Posted Thu July 05, 2018 12:14 PM

    Hi

    tuple t
    {
    int a;
    string b;
    }

    t myArray[1..3][1..2]=[[<1,"A">,<2,"B">],[<3,"A">,<4,"B">],[<5,"A">,<6,"B">]];

    execute
    {
    writeln(myArray);
    }

    works fine

    regards


    #CPLEXOptimizers
    #DecisionOptimization


  • 5.  Re: Create array of tuples

    Posted Fri July 06, 2018 05:05 AM

    Originally posted by: labrecheMustapha


    Hi Alex,

    I did it and it works but I would like to access the elements of the tuples and have something like that : 

    int consequence_economic[i in Cities][p in Periodes];// this will give me theconsequence_economic values (tuples elements) for each structure (i in cities) in each period (p in Periods)  

    int prec[i in Cities][j in Cities][p in Periodes] = consequence_economic[i][p] >= consequence_economic[j][p] ? 1 : 0;

    the definitions are

    tuple Structures {
    int i;
    float failure_probability_threshold; 
    int failure_probability_value_category;
    string h;
    int consequence_economic; 
    string consequence_category; 
    string risk_category;
    }

    Structures Array_Structure[1..p][1..n] = ...;


    #CPLEXOptimizers
    #DecisionOptimization


  • 6.  Re: Create array of tuples

    Posted Fri July 06, 2018 06:03 AM

    Originally posted by: labrecheMustapha


    i did that but i have this error :

    Index hors bornes pour le tableau "consequence_economic#0" : 5.

    Expression d'initialisation non valide pour l'élément de tableau : prec#0#0#4.

    int consequence_economic[i in Cities][q in Periodes] = Array_Structure[q][i].consequence_economic;  
    int prec[q in Periodes][i in Cities][j in Cities]= consequence_economic[q][i] >= consequence_economic[q][j] ? 1 : 0;

    execute {
    writeln(consequence_economic);
    writeln(prec);
    }


    #CPLEXOptimizers
    #DecisionOptimization


  • 7.  Re: Create array of tuples

    Posted Fri July 06, 2018 06:17 AM

    Originally posted by: labrecheMustapha


    I solve error,

    i post the code for other users!

    float scales_failure[1..2][l in Inspection_technic] = ...;

    Structures Array_Structure[1..p][1..n] = ...;

    int consequence_economic[i in Cities][q in Periodes] = Array_Structure[q][i].consequence_economic;  
    int prec[q in Periodes][i in Cities][j in Cities]= consequence_economic[i][q] >= consequence_economic[j][q] ? 1 : 0;

    float failure_probability_threshold[i in Cities][q in Periodes]= Array_Structure[q][i].failure_probability_threshold; 
    int bes[i in Cities][l in Inspection_technic][q in Periodes] = scales_failure[1][l] <= failure_probability_threshold[i][q] <= scales_failure[2][l] ? 1 : 0;
    execute {
    writeln(consequence_economic);
    writeln(prec);
    }

    Thanks Alex


    #CPLEXOptimizers
    #DecisionOptimization