Sto lavorando su un semplice problema di allocazione delle risorse, che sto risolvendo usando il DP all'indietro. Il codice completo è disponibile all'indirizzo: link
Funziona bene, ma sono un po 'perplesso su come recuperare la politica ottimale una volta eseguita l'ottimizzazione. Uso un decoratore di memoization, ma non ho idea di come ottenerne la politica ottimale alla fine. (La politica sarebbe una serie di 1,0 come descrizione di quando allocare e quando no.)
def memoize(f):
cache = {}
def memoizedFunction(*args):
if args not in cache:
cache[args] = f(*args)
return cache[args]
memoizedFunction.cache = cache
return memoizedFunction
In uno sforzo alternativo io uso:
def record(D,key,item):
"""Records the value of item in the dictionary d with k"""
if key in D.keys():
D[key].append(item)
else:
D[key] = [item]
return D
E nel DP:
if v == no_pump:
pos = 0
else:
pos = 1
record(X,i+1,pos)
La mia impressione è che se posso creare un nuovo dizionario (X) per ogni politica e registrare il valore ottimale fino alla sua esecuzione, potrebbe funzionare. Ma non so come farlo. Inoltre sembra abbastanza inefficiente.
Per chiarire: i metodi in avanti, o la conversione in un grafico non sono adatti in quanto l'intero problema sarà convertito in un problema di controllo stocastico in seguito.