Advertisement
Guest User

zadanie

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