Advertisement
Guest User

5465465

a guest
Dec 16th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 19.16 KB | None | 0 0
  1. #pragma warning(disable:4996)
  2. #include "CMscnProblem.h"
  3.  
  4. #define PREFIX 4
  5.  
  6. CMscnProblem::CMscnProblem()
  7. {
  8.     i_Dostawca_amount = 1;
  9.     i_Fabryka_amount = 1;
  10.     i_Magazyn_amount = 1;
  11.     i_Sklep_amount = 1;
  12.  
  13.     d_sd = new double[i_Dostawca_amount];  
  14.     d_sf = new double[i_Fabryka_amount];   
  15.     d_sm = new double[i_Magazyn_amount];   
  16.     d_ss = new double[i_Sklep_amount];     
  17.  
  18.     //cd
  19.     d_cd = new double *[i_Dostawca_amount];
  20.     for (int i = 0; i < i_Dostawca_amount; i++)
  21.         d_cd[i] = new double[i_Fabryka_amount];
  22.  
  23.     //cf
  24.     d_cf = new double *[i_Fabryka_amount];
  25.     for (int i = 0; i < i_Fabryka_amount; i++)
  26.         d_cf[i] = new double[i_Magazyn_amount];
  27.  
  28.     //cm
  29.     d_cm = new double *[i_Magazyn_amount];
  30.     for (int i = 0; i < i_Magazyn_amount; i++)
  31.         d_cm[i] = new double[i_Sklep_amount];
  32.    
  33.     d_prize = new double[i_Sklep_amount];  
  34.     d_ud = new double[i_Dostawca_amount];  
  35.     d_uf = new double[i_Fabryka_amount];   
  36.     d_um = new double[i_Magazyn_amount];
  37.    
  38.     i_pdSolution_expected_length = 0;
  39.  
  40.     b_error = false;
  41. }
  42.  
  43. CMscnProblem::~CMscnProblem()
  44. {
  45.     delete d_sd;
  46.     delete d_sf;
  47.     delete d_sm;
  48.     delete d_ss;
  49.  
  50.     for (int i = 0; i < i_Dostawca_amount; i++)
  51.         delete d_cd[i];
  52.     for (int i = 0; i < i_Fabryka_amount; i++)
  53.         delete d_cf[i];
  54.     for (int i = 0; i < i_Magazyn_amount; i++)
  55.         delete d_cm[i];
  56.  
  57.     delete d_cd;
  58.     delete d_cf;
  59.     delete d_cm;
  60.  
  61.     delete d_prize;
  62.  
  63.     delete d_ud;
  64.     delete d_uf;
  65.     delete d_um;
  66.  
  67.     if(pfFile==NULL)
  68.         delete pfFile;
  69.  
  70.     delete pd_min_max;
  71. }
  72.  
  73. bool CMscnProblem::b_set_Dostawca_amount(int i_amount)
  74. {
  75.     if (i_amount <= 0)
  76.         return false;
  77.     if (i_amount == i_Dostawca_amount)
  78.         return true;
  79.  
  80.     b_modify_matrix(&d_cd, i_amount, i_Fabryka_amount, i_Dostawca_amount, i_Fabryka_amount);
  81.     b_modify_table(&d_sd, i_Dostawca_amount, i_amount);
  82.     b_modify_table(&d_ud, i_Dostawca_amount, i_amount);
  83.     i_Dostawca_amount = i_amount;
  84.  
  85.     return true;
  86. }
  87.  
  88. bool CMscnProblem::b_set_Fabryka_amount(int i_amount)
  89. {
  90.     if (i_amount < 0)
  91.         return false;
  92.     if (i_amount == i_Fabryka_amount)
  93.         return true;
  94.  
  95.     b_modify_matrix((&d_cf), i_amount, i_Magazyn_amount, i_Fabryka_amount, i_Magazyn_amount);
  96.     b_modify_matrix(&d_cd, i_Dostawca_amount, i_amount, i_Dostawca_amount, i_Fabryka_amount);
  97.     b_modify_table(&d_sf, i_Fabryka_amount, i_amount);
  98.     b_modify_table(&d_uf, i_Fabryka_amount, i_amount);
  99.     i_Fabryka_amount = i_amount;
  100.  
  101.     return true;
  102. }
  103.  
  104. bool CMscnProblem::b_set_Magazyn_amount(int i_amount)
  105. {
  106.     if (i_amount < 0)
  107.         return false;
  108.     if (i_amount == i_Magazyn_amount)
  109.         return true;
  110.  
  111.     b_modify_matrix(&d_cm, i_amount, i_Sklep_amount, i_Magazyn_amount, i_Sklep_amount);
  112.     b_modify_matrix(&d_cf, i_Fabryka_amount, i_amount, i_Fabryka_amount, i_Magazyn_amount);
  113.     b_modify_table(&d_sm, i_Magazyn_amount, i_amount);
  114.     b_modify_table(&d_um, i_Magazyn_amount, i_amount);
  115.     i_Magazyn_amount = i_amount;
  116.  
  117.    
  118.     return true;
  119. }
  120.  
  121. bool CMscnProblem::b_set_Sklep_amount(int i_amount)
  122. {
  123.     if (i_amount < 0)
  124.         return false;
  125.     if (i_amount == i_Sklep_amount)
  126.         return true;
  127.  
  128.     b_modify_matrix(&d_cm, i_amount, i_Sklep_amount, i_Magazyn_amount, i_Sklep_amount);
  129.     b_modify_table(&d_ss, i_Sklep_amount, i_amount);
  130.     b_modify_table(&d_prize, i_Sklep_amount, i_amount);
  131.     i_Sklep_amount = i_amount;
  132.  
  133.     return true;
  134. }
  135.  
  136. bool CMscnProblem::b_set_value_cd_at(double d_value, int i_row, int i_column)
  137. {
  138.     if (i_row < 0 || i_column < 0 || d_value < 0)
  139.         return false;
  140.    
  141.     d_cd[i_row][i_column] = d_value;
  142.  
  143.     return true;
  144. }
  145.  
  146. bool CMscnProblem::b_set_value_cf_at(double d_value, int i_row, int i_column)
  147. {
  148.     if (i_row < 0 || i_column < 0 || d_value < 0)
  149.         return false;
  150.  
  151.     d_cf[i_row][i_column] = d_value;
  152.  
  153.     return true;
  154. }
  155.  
  156. bool CMscnProblem::b_set_value_cm_at(double d_value, int i_row, int i_column)
  157. {
  158.     if (i_row < 0 || i_column < 0 || d_value < 0)
  159.         return false;
  160.  
  161.     d_cm[i_row][i_column] = d_value;
  162.  
  163.     return true;
  164. }
  165.  
  166. bool CMscnProblem::b_set_value_sd_at(double d_value, int i_index)
  167. {
  168.     if (i_index<0 || d_value < 0)
  169.         return false;
  170.  
  171.     d_sd[i_index] = d_value;
  172.  
  173.     return true;
  174. }
  175.  
  176. bool CMscnProblem::b_set_value_sf_at(double d_value, int i_index)
  177. {
  178.     if (i_index < 0 || d_value < 0)
  179.         return false;
  180.  
  181.     d_sf[i_index] = d_value;
  182.  
  183.     return true;
  184. }
  185.  
  186. bool CMscnProblem::b_set_value_sm_at(double d_value, int i_index)
  187. {
  188.     if (i_index < 0 || d_value < 0)
  189.         return false;
  190.  
  191.     d_sm[i_index] = d_value;
  192.  
  193.     return true;
  194. }
  195.  
  196. bool CMscnProblem::b_set_value_ss_at(double d_value, int i_index)
  197. {
  198.     if (i_index < 0 || d_value < 0)
  199.         return false;
  200.  
  201.     d_ss[i_index] = d_value;
  202.  
  203.     return true;
  204. }
  205.  
  206. double CMscnProblem::d_Get_Quality(double *pdSolution, bool &error)
  207. {
  208.     i_pdSolution_expected_length = PREFIX + (i_Dostawca_amount*i_Fabryka_amount) + (i_Fabryka_amount*i_Magazyn_amount) + (i_Magazyn_amount*i_Sklep_amount);
  209.  
  210.     i_pdSolution_length = PREFIX + (pdSolution[0] * pdSolution[1]) + (pdSolution[1] * pdSolution[2]) + (pdSolution[2] * pdSolution[3]);
  211.     if (i_pdSolution_expected_length != i_pdSolution_length)
  212.     {
  213.         error = true;
  214.         return 0;
  215.     }
  216.  
  217.     b_error = false;
  218.     double d_quality = 0;
  219.    
  220.     d_quality -= d_get_transport_cost(pdSolution);
  221.    
  222.     if (b_error == true)
  223.     {
  224.         error = b_error;
  225.         return d_quality;
  226.     }
  227.  
  228.     d_quality += d_get_income(pdSolution);
  229.     d_quality -= d_get_intrest_cost(pdSolution);
  230.  
  231.     error = b_error;
  232.     return d_quality;
  233. }
  234.  
  235. double CMscnProblem::d_get_transport_cost(double *pdSolution)
  236. {
  237.     double d_suma = 0;
  238.     int i_counter = PREFIX;
  239.  
  240.     for(int i=0; i<i_Dostawca_amount; i++)
  241.         for (int j = 0; j < i_Fabryka_amount; j++) {
  242.             if (d_cd[i][j] == NULL || pdSolution[i_counter] == NULL || pdSolution[i_counter]<0)
  243.             {
  244.                 b_error = true;
  245.                 return d_suma;
  246.             }
  247.             d_suma += d_cd[i][j] * pdSolution[i_counter];
  248.             i_counter++;
  249.         }
  250.  
  251.     for(int i=0; i<i_Fabryka_amount; i++)
  252.         for (int j = 0; j < i_Magazyn_amount; j++) {
  253.             if (d_cf[i][j] == NULL || pdSolution[i_counter] == NULL || pdSolution[i_counter] < 0)
  254.             {
  255.                 b_error = true;
  256.                 return d_suma;
  257.             }
  258.             d_suma += d_cf[i][j] * pdSolution[i_counter];
  259.             i_counter++;
  260.         }
  261.  
  262.     for(int i=0; i<i_Magazyn_amount; i++)
  263.         for (int j = 0; j < i_Sklep_amount; j++){
  264.             if (d_cm[i][j] == NULL || pdSolution[i_counter] == NULL || pdSolution[i_counter] < 0)
  265.             {
  266.                 b_error = true;
  267.                 return d_suma;
  268.             }
  269.             d_suma += d_cm[i][j] * pdSolution[i_counter];
  270.             i_counter++;
  271.         }
  272.  
  273.     return d_suma;
  274. }
  275.  
  276. double CMscnProblem::d_get_intrest_cost(double *pdSolution)
  277. {
  278.     double d_suma = 0;
  279.     int i_counter = PREFIX;
  280.     bool b_done = false;
  281.  
  282.     for (int i = 0; i < i_Dostawca_amount; i++) {
  283.         for (int j = 0; (j < i_Fabryka_amount && b_done==false); j++)
  284.         {
  285.             if (pdSolution[i_counter] > 0)
  286.                 b_done = true;
  287.             i_counter++;
  288.         }
  289.        
  290.         if (b_done == true)
  291.             d_suma += d_ud[i];
  292.  
  293.         b_done = false;
  294.     }
  295.  
  296.     i_counter = PREFIX + i_Dostawca_amount * i_Fabryka_amount ;
  297.  
  298.     for (int i = 0; i < i_Fabryka_amount; i++) {
  299.         for (int j = 0; (j < i_Magazyn_amount && b_done == false); j++)
  300.         {
  301.             if (pdSolution[i_counter] > 0)
  302.                 b_done = true;
  303.             i_counter++;
  304.         }
  305.  
  306.         if (b_done == true)
  307.             d_suma += d_uf[i];
  308.  
  309.         b_done = false;
  310.     }
  311.  
  312.     i_counter = PREFIX + (i_Dostawca_amount*i_Fabryka_amount) + (i_Fabryka_amount*i_Magazyn_amount) ;
  313.  
  314.     for (int i = 0; i < i_Magazyn_amount; i++) {
  315.         for (int j = 0; (j < i_Sklep_amount && b_done == false); j++)
  316.         {
  317.             if (pdSolution[i_counter] > 0)
  318.                 b_done = true;
  319.         }
  320.  
  321.         if (b_done == true)
  322.             d_suma += d_um[i];
  323.  
  324.         b_done = false;
  325.     }
  326.  
  327.     return d_suma;
  328. }
  329.  
  330. double CMscnProblem::d_get_income(double *pdSolution)
  331. {
  332.     double d_suma = 0;
  333.     int i_counter = PREFIX + (i_Dostawca_amount*i_Fabryka_amount) + (i_Magazyn_amount*i_Fabryka_amount) ;
  334.  
  335.     for(int i=0; i<i_Magazyn_amount; i++)
  336.         for (int j = 0; j < i_Sklep_amount; j++)
  337.         {
  338.             d_suma += d_prize[j] * pdSolution[i_counter];
  339.             i_counter++;
  340.         }
  341.  
  342.     return d_suma;
  343. }
  344.  
  345. bool CMscnProblem::b_ConstraintsSatisfied(double *pdSolution, bool &error)
  346. {
  347.     int i_counter = PREFIX;
  348.  
  349.     double d_suma = 0;
  350.  
  351.     double *d_fabryka_value;
  352.     d_fabryka_value = new double[i_Fabryka_amount];
  353.     for (int i = 0; i < i_Fabryka_amount; i++)
  354.         d_fabryka_value[i] = 0;
  355.  
  356.  
  357.     for (int i = 0; i < i_Dostawca_amount; i++)
  358.     {
  359.         for (int j = 0; j < i_Fabryka_amount; j++)
  360.         {
  361.             d_fabryka_value[j] += pdSolution[i_counter];
  362.             d_suma += pdSolution[i_counter];
  363.             i_counter++;
  364.         }
  365.  
  366.         if (d_suma > d_sd[i])
  367.             return false;
  368.         d_suma = 0;
  369.     }
  370.  
  371.     double *d_magazyn_value;
  372.     d_magazyn_value = new double[i_Magazyn_amount];
  373.     for (int i = 0; i < i_Magazyn_amount; i++)
  374.         d_magazyn_value[i] = 0;
  375.  
  376.  
  377.     for (int i = 0; i < i_Fabryka_amount; i++)
  378.     {
  379.         for (int j = 0; j < i_Magazyn_amount; j++)
  380.         {
  381.             d_magazyn_value[j] += pdSolution[i_counter];
  382.             d_suma += pdSolution[i_counter];
  383.             i_counter++;
  384.         }
  385.  
  386.         if (d_fabryka_value[i] < d_suma)
  387.             return false;
  388.         if (d_suma > d_sf[i])
  389.             return false;
  390.         d_suma = 0;
  391.     }
  392.  
  393.     double *d_sklep_value;
  394.     d_sklep_value= new double[i_Sklep_amount];
  395.     for (int i = 0; i < i_Sklep_amount; i++)
  396.         d_sklep_value[i] = 0;
  397.  
  398.     for (int i = 0; i < i_Magazyn_amount; i++)
  399.     {
  400.         for (int j = 0; j < i_Sklep_amount; j++)
  401.         {
  402.             d_sklep_value[j] += pdSolution[i_counter];
  403.             d_suma += pdSolution[i_counter];
  404.             i_counter++;
  405.         }
  406.        
  407.         if (d_magazyn_value[i] < d_suma)
  408.             return false;
  409.         if (d_suma > d_sm[i])
  410.             return false;
  411.         d_suma = 0;
  412.     }
  413.  
  414.     for (int i = 0; i < i_Sklep_amount; i++)
  415.     {
  416.         if (d_sklep_value[i] > d_ss[i])
  417.             return false;
  418.     }
  419.  
  420.     delete d_fabryka_value;
  421.     delete d_sklep_value;
  422.     delete d_magazyn_value;
  423.    
  424.     return true;
  425. }
  426.  
  427. bool CMscnProblem::b_save(std::string s_file_name, double *pdSolution)
  428. {
  429.     if (s_file_name == "")
  430.         return false;
  431.     pfFile = fopen(s_file_name.c_str(), "w+");
  432.     if (pfFile != NULL) {
  433.         fprintf(pfFile, "%s %d\n", "D", i_Dostawca_amount);
  434.         fprintf(pfFile, "%s %d\n", "F", i_Fabryka_amount);
  435.         fprintf(pfFile, "%s %d\n", "M", i_Magazyn_amount);
  436.         fprintf(pfFile, "%s %d\n", "S", i_Sklep_amount);
  437.  
  438.         int i_counter = PREFIX;
  439.  
  440.         fprintf(pfFile, "xd\n");
  441.         for (int i = 0; i < i_Dostawca_amount; i++) {
  442.             for (int j = 0; j < i_Fabryka_amount; j++) {
  443.                 fprintf(pfFile, "%g;", pdSolution[i_counter]);
  444.                 i_counter++;
  445.             }
  446.             fprintf(pfFile, "\n");
  447.         }
  448.        
  449.         fprintf(pfFile, "xf\n");
  450.         for (int i = 0; i < i_Fabryka_amount; i++) {
  451.             for (int j = 0; j < i_Magazyn_amount; j++) {
  452.                 fprintf(pfFile, "%g;", pdSolution[i_counter]);
  453.                 i_counter++;
  454.             }
  455.             fprintf(pfFile, "\n");
  456.         }
  457.  
  458.         fprintf(pfFile, "xm\n");
  459.         for (int i = 0; i < i_Magazyn_amount; i++) {
  460.             for (int j = 0; j < i_Sklep_amount; j++) {
  461.                 fprintf(pfFile, "%g;", pdSolution[i_counter]);
  462.                 i_counter++;
  463.             }
  464.             fprintf(pfFile, "\n");
  465.         }
  466.         fclose(pfFile);
  467.        
  468.         return true;
  469.     }
  470.     else
  471.     {
  472.         return false;
  473.     }
  474. }
  475.  
  476. bool CMscnProblem::b_save_object(std::string s_file_name)
  477. {
  478.     if (s_file_name == "")
  479.         return false;
  480.     pfFile = fopen(s_file_name.c_str(), "w+");
  481.     if (pfFile != NULL) {
  482.         fprintf(pfFile, "%s %d\n", "D", i_Dostawca_amount);
  483.         fprintf(pfFile, "%s %d\n", "F", i_Fabryka_amount);
  484.         fprintf(pfFile, "%s %d\n", "M", i_Magazyn_amount);
  485.         fprintf(pfFile, "%s %d\n", "S", i_Sklep_amount);
  486.  
  487.         fprintf(pfFile, "sd\n");
  488.         for (int i = 0; i < i_Dostawca_amount; i++)
  489.             fprintf(pfFile, "%g ", d_sd[i]);
  490.  
  491.         fprintf(pfFile, "\nsf\n");
  492.         for (int i = 0; i < i_Fabryka_amount; i++)
  493.             fprintf(pfFile, "%g ", d_sf[i]);
  494.  
  495.         fprintf(pfFile, "\nsm\n");
  496.         for (int i = 0; i < i_Magazyn_amount; i++)
  497.             fprintf(pfFile, "%g ", d_sm[i]);
  498.  
  499.         fprintf(pfFile, "\nss\n");
  500.         for (int i = 0; i < i_Sklep_amount; i++)
  501.             fprintf(pfFile, "%g ", d_ss[i]);
  502.  
  503.         fprintf(pfFile, "\ncd\n");
  504.         for (int i = 0; i < i_Dostawca_amount; i++) {
  505.             for (int j = 0; j < i_Fabryka_amount; j++)
  506.                 fprintf(pfFile, "%g ", d_cd[i][j]);
  507.             fprintf(pfFile, "\n");
  508.         }
  509.  
  510.         fprintf(pfFile, "cf\n");
  511.         for (int i = 0; i < i_Fabryka_amount; i++) {
  512.             for (int j = 0; j < i_Magazyn_amount; j++)
  513.                 fprintf(pfFile, "%g ", d_cf[i][j]);
  514.             fprintf(pfFile, "\n");
  515.         }
  516.  
  517.         fprintf(pfFile, "cm\n");
  518.         for (int i = 0; i < i_Magazyn_amount; i++) {
  519.             for (int j = 0; j < i_Sklep_amount; j++)
  520.                 fprintf(pfFile, "%g ", d_cm[i][j]);
  521.             fprintf(pfFile, "\n");
  522.         }
  523.  
  524.         fprintf(pfFile, "ud\n");
  525.         for (int i = 0; i < i_Dostawca_amount; i++)
  526.             fprintf(pfFile, "%g ", d_ud[i]);
  527.  
  528.         fprintf(pfFile, "\nuf\n");
  529.         for (int i = 0; i < i_Fabryka_amount; i++)
  530.             fprintf(pfFile, "%g ", d_uf[i]);
  531.  
  532.         fprintf(pfFile, "\num\n");
  533.         for (int i = 0; i < i_Magazyn_amount; i++)
  534.             fprintf(pfFile, "%g ", d_um[i]);
  535.  
  536.         fprintf(pfFile, "\np\n");
  537.         for (int i = 0; i < i_Sklep_amount; i++)
  538.             fprintf(pfFile, "%g ", d_prize[i]);
  539.  
  540.         fprintf(pfFile, "\nxdminmax\n");
  541.         for (int i = 0; i < 2 * i_Dostawca_amount*i_Fabryka_amount; i++)
  542.             fprintf(pfFile, "%g ", pd_min_max->at(i));
  543.  
  544.         fprintf(pfFile, "\nxfminmax\n");
  545.         for (int i = 2 * i_Dostawca_amount*i_Fabryka_amount; i < 2 * i_Dostawca_amount*i_Fabryka_amount + 2 * i_Fabryka_amount*i_Magazyn_amount; i++)
  546.             fprintf(pfFile, "%g ", pd_min_max->at(i));
  547.  
  548.         fprintf(pfFile, "\nxmminmax\n");
  549.         for (int i = 2 * i_Dostawca_amount*i_Fabryka_amount + 2 * i_Fabryka_amount*i_Magazyn_amount; i < pd_min_max->size(); i++)
  550.             fprintf(pfFile, "%g ", pd_min_max->at(i));
  551.  
  552.         fclose(pfFile);
  553.        
  554.         return true;
  555.     }
  556.     else {
  557.        
  558.         return false;
  559.     };
  560. }
  561.  
  562. bool CMscnProblem::b_load(std::string s_file_name) {
  563.     if (s_file_name == "")
  564.         return false;
  565.     pfFile = fopen(s_file_name.c_str(), "r");
  566.     if (pfFile != NULL) {
  567.         char cBuf[100];
  568.         int iBuf;
  569.  
  570.        
  571.         fscanf(pfFile, "%s", cBuf);
  572.         fscanf(pfFile, "%d", &iBuf);
  573.         if (i_Dostawca_amount != iBuf)
  574.             b_set_Dostawca_amount(iBuf);
  575.        
  576.         fscanf(pfFile, "%s", cBuf);
  577.         fscanf(pfFile, "%d", &iBuf);
  578.         if (i_Fabryka_amount != iBuf)
  579.             b_set_Fabryka_amount(iBuf);
  580.        
  581.         fscanf(pfFile, "%s", cBuf);
  582.         fscanf(pfFile, "%d", &iBuf);
  583.         if (i_Magazyn_amount != iBuf)
  584.             b_set_Magazyn_amount(iBuf);
  585.        
  586.         fscanf(pfFile, "%s", cBuf);
  587.         fscanf(pfFile, "%d", &iBuf);
  588.         if (i_Sklep_amount != iBuf)
  589.             b_set_Sklep_amount(iBuf);
  590.  
  591.         float fBuf;
  592.         char cbuf;
  593.  
  594.         fscanf(pfFile, "%s", cBuf);
  595.         for (int i = 0; i < i_Dostawca_amount; i++) {
  596.             fscanf(pfFile, "%f", &fBuf);
  597.             fscanf(pfFile, "%c", &cbuf);
  598.             if (cbuf != ';') { fclose(pfFile); return false; }
  599.             d_sd[i] = fBuf;
  600.         }
  601.        
  602.         fscanf(pfFile, "%s", cBuf);
  603.         for (int i = 0; i < i_Fabryka_amount; i++) {
  604.             fscanf(pfFile, "%f", &fBuf);
  605.             fscanf(pfFile, "%c", &cbuf);
  606.             if (cbuf != ';') { fclose(pfFile); return false; }
  607.             d_sf[i] = fBuf;
  608.         }
  609.        
  610.         fscanf(pfFile, "%s", cBuf);
  611.         for (int i = 0; i < i_Magazyn_amount; i++) {
  612.             fscanf(pfFile, "%f", &fBuf);
  613.  
  614.             fscanf(pfFile, "%c", &cbuf);
  615.             if (cbuf != ';') { fclose(pfFile); return false; }
  616.             d_sm[i] = fBuf;
  617.         }
  618.        
  619.         fscanf(pfFile, "%s", cBuf);
  620.         for (int i = 0; i < i_Sklep_amount; i++) {
  621.             fscanf(pfFile, "%f", &fBuf);
  622.             fscanf(pfFile, "%c", &cbuf);
  623.             if (cbuf != ';') { fclose(pfFile); return false; }
  624.             d_ss[i] = fBuf;
  625.         }
  626.        
  627.         fscanf(pfFile, "%s", cBuf);
  628.         for (int i = 0; i < i_Dostawca_amount; i++)
  629.             for (int j = 0; j < i_Fabryka_amount; j++) {
  630.                 fscanf(pfFile, "%f", &fBuf);
  631.                 fscanf(pfFile, "%c", &cbuf);
  632.                 if (cbuf != ';') { fclose(pfFile); return false; }
  633.                 d_cd[i][j] = fBuf;
  634.             }
  635.        
  636.         fscanf(pfFile, "%s", cBuf);
  637.         for (int i = 0; i < i_Fabryka_amount; i++)
  638.             for (int j = 0; j < i_Magazyn_amount; j++) {
  639.                 fscanf(pfFile, "%f", &fBuf);
  640.                 fscanf(pfFile, "%c", &cbuf);
  641.                 if (cbuf != ';') { fclose(pfFile); return false; }
  642.                 d_cf[i][j] = fBuf;
  643.             }
  644.        
  645.         fscanf(pfFile, "%s", cBuf);
  646.         for (int i = 0; i < i_Magazyn_amount; i++)
  647.             for (int j = 0; j < i_Sklep_amount; j++) {
  648.                 fscanf(pfFile, "%f", &fBuf);
  649.                 fscanf(pfFile, "%c", &cbuf);
  650.                 if (cbuf != ';') { fclose(pfFile); return false; }
  651.                 d_cm[i][j] = fBuf;
  652.             }
  653.        
  654.         fscanf(pfFile, "%s", cBuf);
  655.         for (int i = 0; i < i_Dostawca_amount; i++) {
  656.             fscanf(pfFile, "%f", &fBuf);
  657.             fscanf(pfFile, "%c", &cbuf);
  658.             if (cbuf != ';') { fclose(pfFile); return false; }
  659.             d_ud[i] = fBuf;
  660.         }
  661.        
  662.         fscanf(pfFile, "%s", cBuf);
  663.         for (int i = 0; i < i_Fabryka_amount; i++) {
  664.             fscanf(pfFile, "%f", &fBuf);
  665.             fscanf(pfFile, "%c", &cbuf);
  666.             if (cbuf != ';') { fclose(pfFile); return false; }
  667.             d_uf[i] = fBuf;
  668.         }
  669.        
  670.         fscanf(pfFile, "%s", cBuf);
  671.         for (int i = 0; i < i_Magazyn_amount; i++) {
  672.             fscanf(pfFile, "%f", &fBuf);
  673.             fscanf(pfFile, "%c", &cbuf);
  674.             if (cbuf != ';') { fclose(pfFile); return false; }
  675.             d_um[i] = fBuf;
  676.         }
  677.        
  678.         fscanf(pfFile, "%s", cBuf);
  679.         for (int i = 0; i < i_Sklep_amount; i++) {
  680.             fscanf(pfFile, "%f", &fBuf);
  681.             fscanf(pfFile, "%c", &cbuf);
  682.             if (cbuf != ';') { fclose(pfFile); return false; }
  683.             d_prize[i] = fBuf;
  684.         }
  685.         fclose(pfFile);
  686.        
  687.         return true;
  688.     }
  689.     else {
  690.        
  691.         return false;
  692.     }
  693. }
  694.  
  695. bool CMscnProblem::b_modify_table(double **d_old_table, int i_old_size, int i_new_size)
  696. {
  697.     if (d_old_table == NULL || i_old_size <= 0 || i_new_size <= 0)
  698.         return false;
  699.     else
  700.     {
  701.         double *d_new_table = new double[i_new_size];
  702.         if (i_old_size > i_new_size) {
  703.             for (int i = 0; i < i_new_size; i++) {
  704.                 d_new_table[i] = (*d_old_table)[i];
  705.             }
  706.         }
  707.         else {
  708.             for (int i = 0; i < i_old_size; i++) {
  709.                 d_new_table[i] = (*d_old_table)[i];
  710.             }
  711.         }
  712.         delete *d_old_table;
  713.         *d_old_table = d_new_table;
  714.     }
  715.     return true;
  716. }
  717.  
  718.  
  719.  
  720. bool CMscnProblem::b_modify_matrix(double ***d_old_matrix, int i_new_rows, int i_new_columns, int i_old_rows, int i_old_columns)
  721. {
  722.     bool b_error = true;
  723.     double **d_new_matrix = new double*[i_new_rows];
  724.     for (int i = 0; i < i_new_rows; i++) {
  725.         d_new_matrix[i] = new double[i_new_columns];
  726.     }
  727.     if (i_new_rows >= i_old_rows && i_new_columns >= i_old_columns) {
  728.         b_error=b_copy_values_of_matrix(&d_new_matrix, d_old_matrix, i_old_rows, i_old_columns);
  729.     }
  730.     else
  731.     if (i_new_rows < i_old_rows && i_new_columns >= i_old_columns) {
  732.         b_error=b_copy_values_of_matrix(&d_new_matrix, d_old_matrix, i_new_rows, i_old_columns);
  733.     }
  734.     else if (i_new_rows >= i_old_rows && i_new_columns < i_old_columns) {
  735.         b_error=b_copy_values_of_matrix(&d_new_matrix, d_old_matrix, i_old_rows, i_new_columns);
  736.     }
  737.     else {
  738.         b_error=b_copy_values_of_matrix(&d_new_matrix, d_old_matrix, i_new_rows, i_new_columns);
  739.     }
  740.     if (b_error == false)
  741.         return false;
  742.     for (int i = 0; i < i_old_rows; i++)
  743.         delete[] (*d_old_matrix)[i];
  744.     delete[] (*d_old_matrix);
  745.     *d_old_matrix = d_new_matrix;
  746.     return true;
  747. }
  748.  
  749. bool CMscnProblem::b_copy_values_of_matrix(double ***d_old_matrix, double ***d_new_matrix, int i_rows, int i_columns)
  750. {
  751.     if (d_old_matrix == NULL || d_new_matrix == NULL)
  752.         return false;
  753.     else
  754.     {
  755.         for (int i = 0; i < i_rows; i++)
  756.             for (int j = 0; j < i_columns; j++)
  757.                 (*d_old_matrix)[i][j] = (*d_new_matrix)[i][j];
  758.     }
  759.     return true;
  760. }
  761.  
  762. void CMscnProblem::v_get_min_max(double *pdSolution)
  763. {
  764.     std::vector<double> *temp_min_max = new std::vector<double>;
  765.     int iSuppliersFactories = i_Dostawca_amount * i_Fabryka_amount;
  766.  
  767.     for (int i = 0; i < i_Dostawca_amount; i++)
  768.         for (int j = 0; j < i_Fabryka_amount; j++) {
  769.             temp_min_max->push_back(0);
  770.             temp_min_max->push_back(d_sd[i]);
  771.         }
  772.     for (int i = 0; i < i_Fabryka_amount; i++)
  773.         for (int j = 0; j < i_Magazyn_amount; j++) {
  774.             temp_min_max->push_back(0);
  775.             temp_min_max->push_back(d_sf[i]);
  776.         }
  777.     for (int i = 0; i < i_Magazyn_amount; i++)
  778.         for (int j = 0; j < i_Sklep_amount; j++) {
  779.             temp_min_max->push_back(0);
  780.             temp_min_max->push_back(d_sm[i]);
  781.         }
  782.     pd_min_max = temp_min_max;
  783. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement