Implementata funzione per scelta strategia migliore (tra quelle disponibili che sono state analizzate)

This commit is contained in:
andrea.villa
2024-05-07 09:20:25 +02:00
parent fedfc92ef0
commit 5ea5c78605
2 changed files with 34 additions and 8 deletions
+33 -8
View File
@@ -633,11 +633,31 @@ end
-------------------------------------------------------------------------------------------------------------
-- -- sceglie la strategia migliore tra quelle disponibili ( presenti nella tabella vProcRot[dRotIndex].AvailableStrategies)
local function ChooseStrategy( Proc, b3Raw)
-- ciclo tutte le strategia
local function ChooseStrategy( Proc)
-- ciclo tutte le strategie
local nIndexBestStrategy = 0
for i = 1, #Proc.AvailableStrategies do
-- se non ancora scelta alcuna strategia
if nIndexBestStrategy == 0 then
-- prendo la prima applicabile che trovo
if Proc.AvailableStrategies[i].Status == 'Completed' or Proc.AvailableStrategies[i].Status == 'Not-Completed' then
nIndexBestStrategy = i
end
-- altrimenti
else
-- se una completa e l'altra no, prediligo la completa
if Proc.AvailableStrategies[i].Status == 'Completed' and Proc.AvailableStrategies[nIndexBestStrategy].Status == 'Not-Completed' then
nIndexBestStrategy = i
-- a parità di stato si controlla rating composito (rating + indice di completamento)
elseif Proc.AvailableStrategies[i].Status == Proc.AvailableStrategies[nIndexBestStrategy].Status then
local dCompositeRatingBestStrategy = Proc.AvailableStrategies[nIndexBestStrategy].Rating + Proc.AvailableStrategies[nIndexBestStrategy].CompletionIndex
local dCompositeRatingStrategyToAnalize = Proc.AvailableStrategies[i].Rating + Proc.AvailableStrategies[i].CompletionIndex
-- si predilige strategia con rating composito più alto. N.B.= se stesso rating, mantengo la prima, che teoricamente è la preferita dal cliente
if dCompositeRatingStrategyToAnalize > dCompositeRatingBestStrategy then
nIndexBestStrategy = i
end
end
end
end
-- salvo sulla proc la migliore strategia
@@ -659,7 +679,7 @@ local function ProcessPieceFeatures( vProcSingleRot, b3Raw)
-- processa le strategie disponibili e salva sulla Proc il voto e info varie per ogni startegia
Proc = MachiningLib.CalculateRatingStrategies( Proc, b3Raw)
-- sceglie la strategia migliore tra quelle disponibili ( presenti nella tabella vProcRot[dRotIndex].AvailableStrategies)
Proc = ChooseStrategy( Proc, b3Raw)
Proc = ChooseStrategy( Proc)
end
end
return vProcSingleRot
@@ -678,7 +698,7 @@ local function ExecPieceFeatures( vProc, b3Raw)
-- carico file script strategia (non serve verificare presenza del file perchè già fatto durante scelta strategia)
local StrategyScriptName = '\\Strategies\\' .. Proc.ChosenStrategy.StrategyId .. '\\' .. Proc.ChosenStrategy.StrategyId
local StrategyScript = require( StrategyScriptName)
-- eseguo la strategia solo come calcolo fattibilità e voto. Non si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati
-- eseguo la strategia e si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati
Proc = StrategyScript.Make( bAddMachining, Proc, Proc.ChosenStrategy.Parameters)
end
end
@@ -716,12 +736,15 @@ function BeamExec.ProcessFeatures()
local nPartId = EgtGetFirstPartInRawPart( nRawId)
if not nPartId and EgtGetRawPartBBox( nRawId):getDimX() < BeamData.MinRaw then break end
local vProc = {}
-- per ogni rotazione, calcolo come lavorare le feature per decidere posizionamento iniziale e in che rotazione verranno lavorate le singole feature
local vProcRot = {}
-- lista contenente le feature da eseguire
local vProc = {}
-- TODO da rimuovere o lasciare solo per debug
EgtStartCounter()
if EgtGetDebugLevel() >= 3 then
EgtStartCounter()
end
-- TODO Il numero di rotazioni da calcolare deve dipendere dalle impostazionei del cliente. Per adesso si calcolano tutte e 4, ma può essere ottimizzato
for dRotIndex = 1, 4 do
@@ -752,7 +775,9 @@ function BeamExec.ProcessFeatures()
end
-- TODO da rimuovere o lasciare solo per debug
local time = EgtStopCounter()
if EgtGetDebugLevel() >= 3 then
local time = EgtStopCounter()
end
-- TODO decidere come lavorare ogni feature in base alla matrice delle rotazioni
-- la matrice delle rotazioni deve già salvare sulla proc la strategia da utilizzare