View Full Version : [Java] Exploring parameter space
qwerty86
09-10-2012, 11:30
Salve a tutti,
qualcuno conosce qualche libreria o qualche software opensource per esplorare lo spazio dei parametri? Mi spiego, sto lavorando a un software che permette di effettuare simulazioni distribuite e ci sono diversi parametri: numero agenti, dimensione del campo, numero iterazioni, etc. Avrei bisogno di qualcosa che dando in input i parametri con dei range e step di incremento mi generi le varie configurazioni possibili. Qualcuno ha mai affrontato il problema? Grazie.
balth@zar
10-10-2012, 12:08
Ma ti serve addirittura una libreria?
Non bastano un po' di cicli for annidati?
Oppure se vuoi fare una cosa un po' più elegante costruisci una serie di iteratori, uno per ogni parametro o gruppo di parametri; ogni iteratore restituisce una serie di valori del parametro nell'ordine da te richiesto, poi crei una funzione ricorsiva che prende come argomento un array di iteratori e richiama la tua funzione "calcolo" con l'array (o la mappa o quello che preferisci) dei valori ottenuti iterando sullo spazio dei parametri.
Faccio un esempio perchè mi sono capito da solo:
- paramIteratorA e paramIteratorB sono due iteratori che mi restituiscono rispettivamente le serie di valori per i parametri A e B
- calcolo(Object[] params) è la mia funzione di calcolo che prende come argomento un array [A, B] di parametri
La funzione di iterazione sarà una cosa del tipo:
public void iterate(Iterator<Object[] iterators) {
iterate(iterators, new Object[iterators.length], 0);
}
protected void iterate(Iterator<Object>[] iterators, Object[] params, int level) {
Iterator paramIt=iterators[level];
List<Object> values=new ArrayList<Object>();
while (paramIt.hasNext() {
values.add(paramIt.next());
}
for (Object param: values) {
params[level]=param;
if (level<iterators.length-1) {
iterate(iterators, params, level+1);
} else {
calcolo(params);
}
}
}
qwerty86
10-10-2012, 14:06
Ma ti serve addirittura una libreria?
Non bastano un po' di cicli for annidati?
Oppure se vuoi fare una cosa un po' più elegante costruisci una serie di iteratori, uno per ogni parametro o gruppo di parametri; ogni iteratore restituisce una serie di valori del parametro nell'ordine da te richiesto, poi crei una funzione ricorsiva che prende come argomento un array di iteratori e richiama la tua funzione "calcolo" con l'array (o la mappa o quello che preferisci) dei valori ottenuti iterando sullo spazio dei parametri.
Faccio un esempio perchè mi sono capito da solo:
- paramIteratorA e paramIteratorB sono due iteratori che mi restituiscono rispettivamente le serie di valori per i parametri A e B
- calcolo(Object[] params) è la mia funzione di calcolo che prende come argomento un array [A, B] di parametri
La funzione di iterazione sarà una cosa del tipo:
public void iterate(Iterator<Object[] iterators) {
iterate(iterators, new Object[iterators.length], 0);
}
protected void iterate(Iterator<Object>[] iterators, Object[] params, int level) {
Iterator paramIt=iterators[level];
List<Object> values=new ArrayList<Object>();
while (paramIt.hasNext() {
values.add(paramIt.next());
}
for (Object param: values) {
params[level]=param;
if (level<iterators.length-1) {
iterate(iterators, params, level+1);
} else {
calcolo(params);
}
}
}
A una cosa del genere avevo pensato anche io, ma pensavo ci fosse già qualche software che a partire da dei parametri generasse una sorta di script.
Il problema principale è che stavo cercando un modo per scrivere sotto forma di "script" le impostazioni dei parametri.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.