Ho un problema che possiamo modellare come la miscelazione di acqua a due differenti temperature per ottenere un certo flusso ad una certa temperatura.
Schematicamente:
Ho una riserva infinita di acqua calda (diciamo 100°C) e acqua fredda (diciamo 0°C).
Ho inoltre 5 rubinetti con i quali posso regolare il flusso.
L'obbiettivo è ottenere in uscita una portata e una temperatura ben definite (per esempio 0.5 l/min a 4°C).
I rubinetti hanno una portata limitata sia in basso che in alto. Possono però essere chiusi completamente.
Per esempio il rubinetto 1 può fornire o 0 l/min o qualsiasi valore tra 0.0006 e 0.03 l/m.
A valle dei rubinetti 1 e 2 si forma una miscela che viene poi controllata dal rubinetto 3. La somma del flusso di 1 e 2 deve sempre essere maggiore al flusso impostato in 3. Miscela in eccesso viene smaltita attraverso il troppopieno.
Valgono tutte le semplificazioni del caso (miscelazione perfetta e istantanea, capacità termica del sistema nulla...)
Se mettessimo una persona con un minimo di pazienza davanti a questo sistema, sarebbe in grado in poco tempo di impostare i flussi per ottenere il risultato desiderato in uscita.
Ma come affrontare il problema se a risolverlo deve essere un computer?
La prima idea che mi è venuta è di cercare di ottenere il flusso usando solo 4 e 5.
Se ci riesco, bene. Altrimenti entra in gioco 3.
Già solo questo passaggio porta però ad un'esplosione delle possibilità: il flusso richiesto in ognuno dei due rubinetti può essere
a) troppo basso
b) accettabile
c) troppo alto
Sono 9 possibili combinazioni, di cui una (accettabile e accettabile) risolve il problema. Tutte le altre 8 necessitano di una correzione dei flussi impostati e l'intervento del rubinetto 3 (di conseguenza anche di 1 e 2).
E qui abbiamo 1, 2 e 3 che possono assumere gli stati a), b) o c). Sono 27 possibilità, che vanno moltiplicate con 8 e portano a 216 possibilità. Se mi metto a programmarlo in modo classico mi diventa una giungla ingestibie di if-else if- else if-...-else.
Stavo quindi pensando ad un approccio di backtracking, ma non sono sicuro che sia poi tanto piú facile.
Ammetto che mi è anche passato per la testa di calcolare una look-up table, ma non è proprio elegante e tenendo conto delle caratteristiche dei "rubinetti" veri, verrebbe una LUT di 2.4 terabytes
Idee?
Boiler

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




