Istanziazione nondeterministica
Vorrei sapere come poter istanziare una variabile ad un valore del suo dominio non deterministicamente. Io utilizzo un codice come quello seguente (che è quello che è spiegato nei suoi lucidi):
dvar_domain(H,D),
dom_member(El,D),
H#=El,
Tale codice istanzia El sempre al primo valore del dominio, mentre io vorrei che El fosse istanziato ad un valore qualsiasi del dominio.. Come fare?
In realta` nei lucidi c'è anche un altro suggerimento piu` semplice: usare indomain
che non fa altro che invocare i 3 goal che indica lei.
Il codice che lei usa istanzia in maniera nondeterministica, cioè lascia aperto un punto di scelta ed in backtracking ne prova un altro.
Se capisco bene, quello che non le piace è che l'ordine in cui vengono provati i valori (cioè l'euristica di selezione del valore) sia sempre lo stesso. Se vuole provare altre euristiche, puo` implementarle lei (ad esempio, trasformando il dominio in lista), oppure puo` usare il predicato search
della libreria fd_search
, in cui sono gia` implementate varie euristiche: scelta casuale, istanziazione del massimo, ... Guardi sul manuale la parte sulla libreria fd_search.