/* Reference : Tiihonen, J., Soininen, T., Niemela, I., Sulonen, R.: Empirical testing of a weight constraint rule based configurator. In ECAI 2002 Configuration Workshop. (2002) 17--22 http://www.soberit.hut.fi/pdmg/Empirical/index.html */ /////////////////////////////////////////////////////////////// // File: esvs.cpp // Desc: ILOG instance for ESVS Benchmark // Auth: Sathi // Date: Mon July 12 2004 ////////////////////////////////////////////////////////////// #include #include #include #include clock_t worst; ILOSTLBEGIN struct assignment_pair{ int varid; int value; }; int main(int argc, char** argv) { if (argc < 2) { cerr << "Usage: machine? \n "; exit(1); } IloEnv env; try { IloModel mdl(env); //////////////////////////////////////////////////////////// // Make aux. data structures for interactive configuration /////////////////////////////////////////////////////////// vector varDom; vector varPtr; //Control_type 2 IloIntVar Control_type(env, 0, 1); varPtr.push_back(&Control_type); varDom.push_back(2); mdl.add( (Control_type == 0) || (Control_type == 1) ); //Control_voltage 2 IloIntVar Control_voltage(env, 0, 1); varPtr.push_back(&Control_voltage); varDom.push_back(2); mdl.add( ( Control_voltage == 0) || ( Control_voltage == 1) ); //Start_system_nonesome 4 IloIntVar Start_system_nonesome(env, 0, 3); varPtr.push_back(&Start_system_nonesome); varDom.push_back(4); mdl.add( ( Start_system_nonesome== 0) || ( Start_system_nonesome== 1) || ( Start_system_nonesome== 2) || ( Start_system_nonesome== 3) ); //Modulating_air_valve_control_nonesome 3 IloIntVar Modulating_air_valve_control_nonesome(env, 0, 2); varPtr.push_back(&Modulating_air_valve_control_nonesome); varDom.push_back(3); mdl.add( ( Modulating_air_valve_control_nonesome == 0) || ( Modulating_air_valve_control_nonesome == 1) || ( Modulating_air_valve_control_nonesome == 2) ); //Week_timer 2 IloIntVar Week_timer(env, 0, 1); varPtr.push_back(&Week_timer); varDom.push_back(2); mdl.add( ( Week_timer == 0) || ( Week_timer == 1) ); //Communication_bus_RS485 2 IloIntVar Communication_bus_RS485(env, 0, 1); varPtr.push_back(&Communication_bus_RS485); varDom.push_back(2); mdl.add( ( Communication_bus_RS485 == 0) || ( Communication_bus_RS485 == 1) ); //Cooling 2 IloIntVar Cooling(env, 0, 1); varPtr.push_back(&Cooling); varDom.push_back(2); mdl.add( ( Cooling == 0) || ( Cooling == 1) ); //Water_type_nonesome 4 IloIntVar Water_type_nonesome(env, 0, 3); varPtr.push_back(&Water_type_nonesome); varDom.push_back(4); mdl.add( ( Water_type_nonesome == 0) || ( Water_type_nonesome == 1) || ( Water_type_nonesome == 2) || ( Water_type_nonesome == 3) ); //Cooling_System_nonesome 4 IloIntVar Cooling_System_nonesome(env, 0, 3); varPtr.push_back(&Cooling_System_nonesome); varDom.push_back(4); mdl.add( ( Cooling_System_nonesome == 0) || ( Cooling_System_nonesome == 1) || ( Cooling_System_nonesome == 2) || ( Cooling_System_nonesome == 3) ); //Additional_Water_Cooling_nonesome 4 IloIntVar Additional_Water_Cooling_nonesome(env, 0, 3); varPtr.push_back(&Additional_Water_Cooling_nonesome); varDom.push_back(4); mdl.add( ( Additional_Water_Cooling_nonesome == 0) || ( Additional_Water_Cooling_nonesome == 1) || ( Additional_Water_Cooling_nonesome == 2) || ( Additional_Water_Cooling_nonesome == 3) ); //Supply_voltage_and_frequency 10 IloIntVar Supply_voltage_and_frequency(env, 0, 9); varPtr.push_back(&Supply_voltage_and_frequency); varDom.push_back(10); mdl.add( ( Supply_voltage_and_frequency == 0) || ( Supply_voltage_and_frequency == 1) || ( Supply_voltage_and_frequency == 2) || ( Supply_voltage_and_frequency == 3) || ( Supply_voltage_and_frequency == 4) || ( Supply_voltage_and_frequency == 5) || ( Supply_voltage_and_frequency == 6) || ( Supply_voltage_and_frequency == 7) || ( Supply_voltage_and_frequency == 8) || ( Supply_voltage_and_frequency == 9) ); //Supply_voltage 6 IloIntVar Supply_voltage(env, 0, 5); varPtr.push_back(&Supply_voltage); varDom.push_back(6); mdl.add( ( Supply_voltage == 0) || ( Supply_voltage == 1) || ( Supply_voltage == 2) || ( Supply_voltage == 3) || ( Supply_voltage == 4) || ( Supply_voltage == 5) ); //Supply_frequency 2 IloIntVar Supply_frequency(env, 0, 1); varPtr.push_back(&Supply_frequency); varDom.push_back(2); mdl.add( ( Supply_frequency == 0) || ( Supply_frequency == 1) ); //Maximum_capacity 61 IloIntVar Maximum_capacity(env, 0, 60); varPtr.push_back(&Maximum_capacity); varDom.push_back(61); mdl.add( ( Maximum_capacity == 0) || ( Maximum_capacity == 1) || ( Maximum_capacity == 2) || ( Maximum_capacity == 3) || ( Maximum_capacity == 4) || ( Maximum_capacity == 5) || ( Maximum_capacity == 6) || ( Maximum_capacity == 7) || ( Maximum_capacity == 8) || ( Maximum_capacity == 9) || ( Maximum_capacity == 10) || ( Maximum_capacity == 11) || ( Maximum_capacity == 12) || ( Maximum_capacity == 13) || ( Maximum_capacity == 14) || ( Maximum_capacity == 15) || ( Maximum_capacity == 16) || ( Maximum_capacity == 17) || ( Maximum_capacity == 18) || ( Maximum_capacity == 19) || ( Maximum_capacity == 20) || ( Maximum_capacity == 21) || ( Maximum_capacity == 22) || ( Maximum_capacity == 23) || ( Maximum_capacity == 24) || ( Maximum_capacity == 25) || ( Maximum_capacity == 26) || ( Maximum_capacity == 27) || ( Maximum_capacity == 28) || ( Maximum_capacity == 29) || ( Maximum_capacity == 30) || ( Maximum_capacity == 31) || ( Maximum_capacity == 32) || ( Maximum_capacity == 33) || ( Maximum_capacity == 34) || ( Maximum_capacity == 35) || ( Maximum_capacity == 36) || ( Maximum_capacity == 37) || ( Maximum_capacity == 38) || ( Maximum_capacity == 39) || ( Maximum_capacity == 30) || ( Maximum_capacity == 41) || ( Maximum_capacity == 42) || ( Maximum_capacity == 43) || ( Maximum_capacity == 44) || ( Maximum_capacity == 45) || ( Maximum_capacity == 46) || ( Maximum_capacity == 47) || ( Maximum_capacity == 48) || ( Maximum_capacity == 49) || ( Maximum_capacity == 50) || ( Maximum_capacity == 51) || ( Maximum_capacity == 52) || ( Maximum_capacity == 53) || ( Maximum_capacity == 54) || ( Maximum_capacity == 55) || ( Maximum_capacity == 56) || ( Maximum_capacity == 57) || ( Maximum_capacity == 58) || ( Maximum_capacity == 59) || ( Maximum_capacity == 60) ); //Nominal_power 5 IloIntVar Nominal_power(env, 0, 4); varPtr.push_back(&Nominal_power); varDom.push_back(5); mdl.add( ( Nominal_power == 0) || ( Nominal_power == 1) || ( Nominal_power == 2) || ( Nominal_power == 3) || ( Nominal_power == 4) ); //Pressure 5 IloIntVar Pressure(env, 0, 4); varPtr.push_back(&Pressure); varDom.push_back(5); mdl.add( ( Pressure == 0) || ( Pressure == 1) || ( Pressure == 2) || ( Pressure == 3) || ( Pressure == 4) ); //Document_language 9 IloIntVar Document_language(env, 0, 8); varPtr.push_back(&Document_language); varDom.push_back(9); mdl.add( ( Document_language == 0) || ( Document_language == 1) || ( Document_language == 2) || ( Document_language == 3) || ( Document_language == 4) || ( Document_language == 5) || ( Document_language == 6) || ( Document_language == 7) || ( Document_language == 8) ); //Super_Novox_inlet 3 IloIntVar Super_Novox_inlet(env, 0, 2); varPtr.push_back(&Super_Novox_inlet); varDom.push_back(3); mdl.add( ( Super_Novox_inlet == 0) || ( Super_Novox_inlet == 1) || ( Super_Novox_inlet == 2) ); //Super_Novox_outlet 2 IloIntVar Super_Novox_outlet(env, 0, 1); varPtr.push_back(&Super_Novox_outlet); varDom.push_back(2); mdl.add( ( Super_Novox_outlet == 0) || ( Super_Novox_outlet == 1) ); //Canopy_filter 2 IloIntVar Canopy_filter(env, 0, 1); varPtr.push_back(&Canopy_filter); varDom.push_back(2); mdl.add( ( Canopy_filter == 0) || ( Canopy_filter == 1) ); //Integrated_refridgeration_air_dryer 2 IloIntVar Integrated_refridgeration_air_dryer(env, 0, 1); varPtr.push_back(&Integrated_refridgeration_air_dryer); varDom.push_back(2); mdl.add( ( Integrated_refridgeration_air_dryer == 0) || ( Integrated_refridgeration_air_dryer == 1) ); //Oil_water_separator 2 IloIntVar Oil_water_separator(env, 0, 1); varPtr.push_back(&Oil_water_separator); varDom.push_back(2); mdl.add( ( Oil_water_separator == 0) || ( Oil_water_separator == 1) ); //Water_draining_system 3 IloIntVar Water_draining_system(env, 0, 2); varPtr.push_back(&Water_draining_system); varDom.push_back(3); mdl.add( ( Water_draining_system == 0) || ( Water_draining_system == 1) || ( Water_draining_system == 2) ); //Maximum_ambient_temperature 3 IloIntVar Maximum_ambient_temperature(env, 0,2 ); varPtr.push_back(&Maximum_ambient_temperature); varDom.push_back(3); mdl.add( ( Maximum_ambient_temperature == 0) || ( Maximum_ambient_temperature == 1) || ( Maximum_ambient_temperature == 2) ); //Altitude 2 IloIntVar Altitude(env, 0, 1); varPtr.push_back(&Altitude); varDom.push_back(2); mdl.add( ( Altitude == 0) || ( Altitude == 1) ); //Packaging 5 IloIntVar Packaging(env, 0, 4); varPtr.push_back(&Packaging); varDom.push_back(5); mdl.add( ( Packaging == 0) || ( Packaging == 1) || ( Packaging == 2) || ( Packaging == 3) || ( Packaging == 4) ); // keep track of interaction int** var_isvalid = new int*[varPtr.size()]; int* is_assigned = new int[varPtr.size()]; for(int i=0;i< varPtr.size();i++) { var_isvalid[i] = new int[varDom[i]]; is_assigned[i] = 0; for(int j=0; j < varDom[i]; j++) var_isvalid[i][j] = 1; } int** var_shownValidThisStep = new int*[varPtr.size()]; for(int i=0;i< varPtr.size();i++) { var_shownValidThisStep[i] = new int[varDom[i]]; for(int j=0; j < varDom[i]; j++) var_shownValidThisStep[i][j] = 0; } assignment_pair* assignments = new assignment_pair[varPtr.size()]; assignment_pair* old_assignments = new assignment_pair[varPtr.size()]; int old_num_assigns = 0; int start_from_scratch = 1; ifstream ti(argv[1]); if (!ti) { cerr << argv[1] << " cannot be opened\n"; exit(1); } int num_assigns = 0; int varid; int value; int inp; int inp2; int itr_count=0; ti >> inp; ti >> inp2; int start_assign = 0; // mdl.add( ); mdl.add( !( Control_type == 0 )||((Week_timer == 1 ) && (Communication_bus_RS485 == 1) && (Start_system_nonesome == 0) && (Modulating_air_valve_control_nonesome == 0) )); mdl.add( !( Control_type == 1 )||( (Start_system_nonesome != 0) && (Modulating_air_valve_control_nonesome != 0) )); mdl.add( !(Cooling == 0) ||( (Water_type_nonesome != 0 ) && (Cooling_System_nonesome != 0) && (Additional_Water_Cooling_nonesome != 0 ) )); mdl.add( !(Cooling == 1) ||( (Water_type_nonesome == 0 ) && (Cooling_System_nonesome == 0) && (Additional_Water_Cooling_nonesome == 0 ) )); mdl.add( !( ((Maximum_capacity == 0) && (Nominal_power == 0 ) && (Pressure == 4 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 1) && (Nominal_power == 1 ) && (Pressure == 4 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 2) && (Nominal_power == 0 ) && (Pressure == 3 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 3) && (Nominal_power == 1 ) && (Pressure == 3 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 3) && (Nominal_power == 1 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0 ) || ( Supply_voltage == 1 ))) || ((Maximum_capacity == 4) && (Nominal_power == 0 ) && (Pressure == 1 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 5) && (Nominal_power == 1 ) && (Pressure == 2 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 6) && (Nominal_power == 1 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2 ) || ( Supply_voltage == 3 ))) || ((Maximum_capacity == 7) && (Nominal_power == 2 ) && (Pressure == 4 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 8) && (Nominal_power == 1 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0 ) || ( Supply_voltage == 1 ))) || ((Maximum_capacity == 9) && (Nominal_power == 1 ) && (Pressure == 1 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 10) && (Nominal_power ==2 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2 ) || ( Supply_voltage == 3 ))) || ((Maximum_capacity == 11) && (Nominal_power == 3 ) && (Pressure == 4 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 12) && (Nominal_power == 2 ) && (Pressure == 3 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 13) && (Nominal_power == 2 ) && (Pressure == 2 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 14) && (Nominal_power == 4 ) && (Pressure == 4 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 15) && (Nominal_power == 1 ) && (Pressure == 0 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 16) && (Nominal_power == 3 ) && (Pressure == 3 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 17) && (Nominal_power == 2 ) && (Pressure == 1 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 18) && (Nominal_power == 3 ) && (Pressure == 2 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 19) && (Nominal_power == 4 ) && ((Pressure == 2 ) || (Pressure == 3 ) ) && ((Supply_frequency == 0 ) || (Supply_frequency == 1 ))) || ((Maximum_capacity == 20) && (Nominal_power == 3 ) && (Pressure == 1 ) && (Supply_frequency == 0 )) || ((Maximum_capacity == 20) && (Nominal_power == 3 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0 ) || ( Supply_voltage == 1 ) ) ) || ((Maximum_capacity == 21) && (Nominal_power == 3 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2 ) || ( Supply_voltage == 3 ) ) ) || ((Maximum_capacity == 22) && (Nominal_power == 3 ) && (Pressure == 0 ) && (Supply_frequency == 0 ) ) || ((Maximum_capacity == 22) && (Nominal_power == 4 ) && (Pressure == 1 ) && (Supply_frequency == 0 ) ) || ((Maximum_capacity == 23) && (Nominal_power == 0 ) && (Pressure == 0 ) && (Supply_frequency == 0 ) ) || ((Maximum_capacity == 24) && (Nominal_power == 0 ) && (Pressure == 2 ) && (Supply_frequency == 0 ) ) || ((Maximum_capacity == 25) && (Nominal_power == 0 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 26) && (Nominal_power == 0 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 27) && (Nominal_power == 0 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 28) && (Nominal_power == 0 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 29) && (Nominal_power == 0 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 30) && (Nominal_power == 0 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 31) && (Nominal_power == 0 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 32) && (Nominal_power == 0 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 33) && (Nominal_power == 0 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 34) && (Nominal_power == 0 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 35) && (Nominal_power == 1 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 36) && (Nominal_power == 1 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 37) && (Nominal_power == 1 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 38) && (Nominal_power == 1 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 39) && (Nominal_power == 1 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 40) && (Nominal_power == 1 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 41) && (Nominal_power == 1 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 42) && (Nominal_power == 2 ) && (Pressure == 0 ) && (Supply_frequency == 0 ) ) || ((Maximum_capacity == 43) && (Nominal_power == 2 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 44) && (Nominal_power == 2 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 45) && (Nominal_power == 2 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 46) && (Nominal_power == 2 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 47) && (Nominal_power == 2 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 48) && (Nominal_power == 2 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 49) && (Nominal_power == 2 ) && (Pressure == 1 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 50) && (Nominal_power == 2 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 51) && (Nominal_power == 2 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 52) && (Nominal_power == 3 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 53) && (Nominal_power == 3 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 54) && (Nominal_power == 3 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 55) && (Nominal_power == 3 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 0) || ( Supply_voltage == 1) ) ) || ((Maximum_capacity == 56) && (Nominal_power == 3 ) && (Pressure == 0 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 57) && (Nominal_power == 3 ) && (Pressure == 2 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 58) && (Nominal_power == 3 ) && (Pressure == 3 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 59) && (Nominal_power == 3 ) && (Pressure == 4 ) && (Supply_frequency == 1 ) && ( (Supply_voltage == 2) || ( Supply_voltage == 3) ) ) || ((Maximum_capacity == 60) && (Nominal_power == 4 ) && (Pressure == 0 ) && ( (Supply_frequency == 0 ) || (Supply_frequency == 1 )) ) )); mdl.add( ! (Supply_voltage_and_frequency == 0) ||( ( Supply_voltage == 1 ) && ( Supply_frequency == 0 ) )); mdl.add( ! (Supply_voltage_and_frequency == 1) ||( ( Supply_voltage == 0 ) && ( Supply_frequency == 0 ) )); mdl.add( ! (Supply_voltage_and_frequency == 2) ||( ( Supply_voltage == 1 ) && ( Supply_frequency == 0 ) )); mdl.add( ! (Supply_voltage_and_frequency == 3) ||( ( Supply_voltage == 1 ) && ( Supply_frequency == 0 ) )); mdl.add( ! (Supply_voltage_and_frequency == 4) ||( ( Supply_voltage == 4 ) && ( Supply_frequency == 0 ) )); mdl.add( ! (Supply_voltage_and_frequency == 5) ||( ( Supply_voltage == 5 ) && ( Supply_frequency == 0 ) )); mdl.add( ! (Supply_voltage_and_frequency == 6) ||( ( Supply_voltage == 0 ) && ( Supply_frequency == 1 ) )); mdl.add( ! (Supply_voltage_and_frequency == 7) ||( ( Supply_voltage == 1 ) && ( Supply_frequency == 1 ) )); mdl.add( ! (Supply_voltage_and_frequency == 8) ||( ( Supply_voltage == 2 ) && ( Supply_frequency == 1 ) )); mdl.add( ! (Supply_voltage_and_frequency == 9) ||( ( Supply_voltage == 3 ) && ( Supply_frequency == 1 ) )); mdl.add( ( ( Super_Novox_inlet == 0 ) || ( Canopy_filter == 0 ))); mdl.add( !( Control_type == 0 )||( Nominal_power == 4)); mdl.add( !( Control_type == 1)||( Nominal_power != 4)); mdl.add( ( not ( ( Control_type == 0 ) && ( (Supply_voltage_and_frequency == 1) || (Supply_voltage_and_frequency == 6) ) ) )); mdl.add( !( Integrated_refridgeration_air_dryer == 1 ) ||( Water_draining_system == 1 )); mdl.add( !( Oil_water_separator == 1) ||( Water_draining_system == 1 )); //////////////////////////////// // Do interactive configuration // from trace file /////////////////////////////// IloExtractableArray iloextractablearray(env,varPtr.size()); IloSolver solver(mdl); do{ clock_t t1=clock(); for(int k = 0; k < old_num_assigns; k++) old_assignments[k] = assignments[k]; ti >> inp; ti >> inp2; while(inp != -1 && inp != -2){ varid = inp; value = inp2; assignments[num_assigns].varid = varid; assignments[num_assigns].value = value; //cerr<<"varid "<> inp; ti >> inp2; } // make the assignments // check for each valid value in previous request. if(num_assigns == old_num_assigns + 1){ int i; for(i = 0; i < old_num_assigns; i++){ if(assignments[i].varid != old_assignments[i].varid || assignments[i].value != old_assignments[i].value) break; } if(i == old_num_assigns) start_from_scratch = 0; else start_from_scratch = 1; } else start_from_scratch=1; if(start_from_scratch){ //remove old_num_assigns of iloextractable array constraints from the model //valid all values are valid values for(int i = 0; i < old_num_assigns; i++){ mdl.remove(iloextractablearray[i]); } for(int i = 0; i < varPtr.size(); i++) for(int j = 0; j < varDom[i];j++) var_isvalid[i][j] = 1; for(int i = 0; i < varPtr.size(); i++) is_assigned[i]=0; start_assign = 0; } else start_assign = old_num_assigns; for(int i = start_assign; i < num_assigns; i++){ iloextractablearray[i] = mdl.add(*varPtr[assignments[i].varid] == assignments[i].value); // debug: I want to know what is assigned // cout << "Assigned: " << varName[assignments[i].varid] << " = " << assignments[i].value << endl; // cout.flush(); is_assigned[assignments[i].varid] = 1; } for(int i = 0; i < varPtr.size(); i++) for(int j = 0; j < varDom[i];j++) var_shownValidThisStep[i][j] = 0; for(int i = 0; i < varPtr.size(); i++){ if (is_assigned[i]) continue; for(int j = 0; j < varDom[i]; j++) { if (!var_isvalid[i][j]) continue; if (var_shownValidThisStep[i][j]) continue; //cout << "i=" << i << " j=" << j << endl; //cout.flush(); IloExtractable current = mdl.add(*varPtr[i] == j); solver.startNewSearch(); if( solver.next() ) for (int g = 0; g < varPtr.size(); g++) { var_shownValidThisStep[g][int(solver.getValue(*varPtr[g]))] = 1; // cout << " fi=" << g << " fj=" << int(solver.getValue(*varPtr[g])); } else var_isvalid[i][j] = 0; // cout << endl; solver.endSearch(); mdl.remove(current); } } // debug: print possible remaining values for each variable // cout << "\nRemaing values of variable domains\n"; // for (int i = 0; i < varPtr.size(); i++) // { // cout << varName[i] << "(" << i << ") "; // if (is_assigned[i]) // cout << " is assigned"; // else // for (int j = 0; j < varDom[i]; j++) // if (var_isvalid[i][j]) // cout << " " << j; // cout << endl; // } // cout << "\n\n"; // cout.flush(); itr_count++; old_num_assigns = num_assigns; num_assigns = 0; clock_t t2=clock(); if(itr_count==0) worst = (t2-t1); if(worst < (t2-t1)) worst = (t2-t1); } while (inp != -2); solver.out() << "End Simulation of " << itr_count << " Requests" << endl; solver.out()<<"Worst Time is "<<(worst/(double)CLOCKS_PER_SEC) << endl; } catch (IloException& ex) { cerr << "Error: " << ex << endl; } env.end(); return 0; }