1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
-- MESURES ET TESTS
local nbIteration : integer := 1000 ;
local Tolerance_Gras : real := 1 -- +/-1% ; local Tolerance_Poids : real := 10 ; -- +/- 10 Kg
while nbIteration > 0 loop
local mesurements : real[2] := ref(Algo1).Mesure_Solution(Liste_Bacs) ;
-- Poids total de la solution S_i ; -- Taux gras global de la solution S_i
local Pds_Solution : real := mesurements[1] ; local TauxGras_Solution : real := mesurements[2] ;
if abs(TauxGras_Solution - TauxGrasCible_Recette) > Tolerance_Gras OR abs(Pds_Solution - PoidsCible_Recette) > Tolerance_Poids then
-- SI LE POIDS DE LA SOLUTION N EST PAS BON ON AJOUTE OU ON SUPPRIME UN BAC
-- SINON SI LE POIDS EST BON ON INTERCHANGE DES BACS, SI LA SOLUTION EST TRES GRASSE ON REMPLACE LE BAC LE PLUS GRAS DE LA SOLUTION
-- PAR LE BAC LE MOINS GRAS DE LA LISTE DES BACS ELIGIBLES ETC ....
if TauxGras_Solution > TauxGrasCible_Recette then
if (Pds_Solution > PoidsCible_Recette + Tolerance_Poids) then
-- SOLUTION TRES GRASSE
-- SUPPRESSION DU BAC LE PLUS GRAS
Solution.sort(Solution.GetColumnNo("TauxGras_BAC") , "down");
Solution.copyRangeto({0,1}..{*,1},Liste_Bacs,0,Liste_Bacs.indexydim + 1) ;
Solution.cutrow(1) ;
elseif (Pds_Solution < PoidsCible_Recette - Tolerance_Poids) then
-- AJOUT DU BAC LE MOINS GRAS
Liste_Bacs.sort(Solution.GetColumnNo("TauxGras_BAC") , "up");
Liste_Bacs.copyRangeto({0,1}..{*,1},Solution,0,Solution.indexydim + 1) ;
Liste_Bacs.CutRow(1) ;
elseif abs(Pds_Solution - PoidsCible_Recette) < Tolerance_Poids then
-- SOLUTION TRES GRASSE
-- SUPPRESSION DU BAC LE PLUS GRAS
Solution.sort(Solution.GetColumnNo("TauxGras_BAC") , "down");
Solution.copyRangeto({0,1}..{*,1},Liste_Bacs,0,Liste_Bacs.indexydim + 1) ;
Solution.cutrow(1) ;
-- AJOUT DU BAC LE MOINS GRAS
Liste_Bacs.sort(Solution.GetColumnNo("TauxGras_BAC") , "up");
Liste_Bacs.copyRangeto({0,1}..{*,1},Solution,0,Solution.indexydim + 1) ;
Liste_Bacs.CutRow(1) ;
end;
else
-- SOLUTION PEU GRASSE
-- SUPPRESSION DU BAC LE - GRAS
if (Pds_Solution > PoidsCible_Recette + Tolerance_Poids) then
Solution.sort(Solution.GetColumnNo("TauxGras_BAC") , "up");
Solution.copyRangeto({0,1}..{*,1},Liste_Bacs,0,Liste_Bacs.indexydim + 1) ;
Solution.cutrow(1) ;
elseif (Pds_Solution <= PoidsCible_Recette - Tolerance_Poids) then
-- AJOUT DU BAC LE + GRAS
Liste_Bacs.sort(Solution.GetColumnNo("TauxGras_BAC") , "down");
Liste_Bacs.copyRangeto({0,1}..{*,1},Solution,0,Solution.indexydim + 1) ;
Liste_Bacs.CutRow(1) ;
elseif abs(Pds_Solution - PoidsCible_Recette) < Tolerance_Poids then
-- SOLUTION TRES GRASSE
-- SUPPRESSION DU BAC LE PLUS GRAS
Solution.sort(Solution.GetColumnNo("TauxGras_BAC") , "down");
Solution.copyRangeto({0,1}..{*,1},Liste_Bacs,0,Liste_Bacs.indexydim + 1) ;
Solution.cutrow(1) ;
-- AJOUT DU BAC LE MOINS GRAS
Liste_Bacs.sort(Solution.GetColumnNo("TauxGras_BAC") , "up");
Liste_Bacs.copyRangeto({0,1}..{*,1},Solution,0,Solution.indexydim + 1) ;
Liste_Bacs.CutRow(1) ;
end;
end;
end;
-- MAJ DU NB D ITERATIONS
nbIteration := nbIteration - 1 ;
end; |
Partager