Decision
- added gui for decisions - fixed problems with net - added unrolled net (cause a bug of smile)
This commit is contained in:
@@ -1,20 +1,35 @@
|
||||
package net.berack.upo.ai.decision;
|
||||
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
|
||||
import net.berack.upo.ai.MyPanel;
|
||||
import net.berack.upo.ai.gui.MyDecisionPanel;
|
||||
import net.berack.upo.ai.problem3.SmileLib;
|
||||
|
||||
/**
|
||||
* Classe che mostra le decisioni possibili, insieme ai guadagni
|
||||
* per la rete Prototipo.xdsl
|
||||
* @author Berack
|
||||
*/
|
||||
public class PrototypeGUI extends MyPanel {
|
||||
public class PrototypeGUI extends MyDecisionPanel {
|
||||
|
||||
private static final String PROTOTIPO = "Prototipo.xdsl";
|
||||
private static final String[] NODES = new String[] {
|
||||
"Effettuare_la_Ricerca", "Ricerca_di_Mercato",
|
||||
"Migliorare_la_Qualità", "Produzione",
|
||||
"Valore_Profitto",
|
||||
};
|
||||
|
||||
public PrototypeGUI() {
|
||||
super(SmileLib.getNetworkFrom(PROTOTIPO), NODES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JMenu getMenu() {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'getMenu'");
|
||||
var menu = new JMenu("Network");
|
||||
var item = new JMenuItem("Reset");
|
||||
item.addActionListener(a -> { this.net.clearAllEvidence(); this.updateAll(); });
|
||||
menu.add(item);
|
||||
return menu;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,18 +2,33 @@ package net.berack.upo.ai.decision;
|
||||
|
||||
import javax.swing.JMenu;
|
||||
|
||||
import net.berack.upo.ai.MyPanel;
|
||||
import net.berack.upo.ai.gui.MyDecisionPanel;
|
||||
import net.berack.upo.ai.problem3.SmileLib;
|
||||
|
||||
/**
|
||||
* Classe che mostra le decisioni possibili, insieme ai guadagni
|
||||
* per la rete Veicolo.xdsl
|
||||
* @author Berack
|
||||
*/
|
||||
public class VehicleGUI extends MyPanel {
|
||||
public class VehicleGUI extends MyDecisionPanel {
|
||||
|
||||
private static final String VEICOLO = "Veicolo unrolled.xdsl";
|
||||
private static final String[] NODES = new String[] {
|
||||
"Sensore_Posizione", "Comando",
|
||||
"Sensore_Posizione_1", "Comando_1",
|
||||
"Sensore_Posizione_2", "Comando_2",
|
||||
"Sensore_Posizione_3", "Comando_3",
|
||||
"Sensore_Posizione_4", "Comando_4",
|
||||
"Somma_Utilità"
|
||||
};
|
||||
|
||||
public VehicleGUI() {
|
||||
super(SmileLib.getNetworkFrom(VEICOLO), NODES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JMenu getMenu() {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'getMenu'");
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package net.berack.upo.ai;
|
||||
package net.berack.upo.ai.gui;
|
||||
|
||||
import java.awt.Dimension;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JSeparator;
|
||||
|
||||
import net.berack.upo.ai.decision.PrototypeGUI;
|
||||
@@ -19,16 +22,16 @@ import net.berack.upo.ai.problem3.LikelihoodWeightingGUI;
|
||||
*/
|
||||
public class MainGUI extends JFrame {
|
||||
|
||||
public static void main(String[] args) {
|
||||
new MainGUI();
|
||||
}
|
||||
|
||||
public final Puzzle8GUI Puzzle8GUI = new Puzzle8GUI();
|
||||
public final TrisGUI TrisGUI = new TrisGUI();
|
||||
public final LikelihoodWeightingGUI LikelihoodWeightingGUI = new LikelihoodWeightingGUI();
|
||||
public final PrototypeGUI PrototypeGUI = new PrototypeGUI();
|
||||
public final VehicleGUI VehicleGUI = new VehicleGUI();
|
||||
|
||||
public static void main(String[] args) {
|
||||
new MainGUI();
|
||||
}
|
||||
|
||||
private final JMenuBar menuBar = new JMenuBar();
|
||||
|
||||
/**
|
||||
@@ -41,7 +44,7 @@ public class MainGUI extends JFrame {
|
||||
this.setJMenuBar(menuBar);
|
||||
|
||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.setSize(400, 400);
|
||||
this.setSize(500, 400);
|
||||
this.setResizable(false);
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setVisible(true);
|
||||
@@ -74,16 +77,29 @@ public class MainGUI extends JFrame {
|
||||
menu.add(vehicle);
|
||||
|
||||
menuBar.add(menu);
|
||||
for(var m : menus) menuBar.add(m);
|
||||
for(var m : menus) if(m != null) menuBar.add(m);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambia il pannello principale con quello passato in input
|
||||
* Nel caso sia un pannello MyDecision allora mette anche uno scroll panel per far si che si
|
||||
* possano vedere tutti i nodi necessari
|
||||
* @param panel il pannello da mostrare
|
||||
*/
|
||||
private void setPanel(MyPanel panel) {
|
||||
this.setContentPane(panel);
|
||||
if(panel instanceof MyDecisionPanel) {
|
||||
var scroll = new JScrollPane(panel);
|
||||
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
|
||||
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(20);
|
||||
scroll.setPreferredSize(new Dimension(500, 400));
|
||||
this.setContentPane(scroll);
|
||||
}
|
||||
else this.setContentPane(panel);
|
||||
|
||||
this.buildMenu(panel.getMenu());
|
||||
panel.updateAll();
|
||||
|
||||
this.pack();
|
||||
this.invalidate();
|
||||
this.validate();
|
||||
94
src/main/java/net/berack/upo/ai/gui/MyDecisionPanel.java
Normal file
94
src/main/java/net/berack/upo/ai/gui/MyDecisionPanel.java
Normal file
@@ -0,0 +1,94 @@
|
||||
package net.berack.upo.ai.gui;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.GroupLayout;
|
||||
import javax.swing.JTextArea;
|
||||
|
||||
import net.berack.upo.ai.gui.nodes.NodeGUI;
|
||||
import net.berack.upo.ai.gui.nodes.NodeGUIFactory;
|
||||
import smile.Network;
|
||||
|
||||
/**
|
||||
* Classe creata per espandere la classe MyPanel aggiungendo la possibilità di mostrare
|
||||
* a schermo una rete e dei suoi nodi passati in input.
|
||||
* Il costruttore costruisce automaticamente i nodi indicati ma non ne mostra i valori.
|
||||
* Per farlo bisognerà utilizzare il metodo updateAll() appena creato il pannello.
|
||||
* NOTA: updateAll() richiama il metodo della rete updateBeliefs() che può essere lento con molti nodi.
|
||||
* @author Berack
|
||||
*/
|
||||
public abstract class MyDecisionPanel extends MyPanel {
|
||||
|
||||
public final Network net;
|
||||
private final List<NodeGUI> update = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Costruisce il dinamicamente da una rete e da una lista di nodi da mostrare.
|
||||
* Il risultato sarà già inserito nel pannello e per vedere i valori bisognerà utilizzare il metodo updateAll()
|
||||
* @param net la rete da mostrare
|
||||
* @param nodes il sottoinsieme di nodi da mostrare
|
||||
*/
|
||||
protected MyDecisionPanel(Network net, String...nodes) {
|
||||
this.net = net;
|
||||
var layout = new GroupLayout(this);
|
||||
|
||||
var size = new Dimension(500, 400);
|
||||
this.setSize(size);
|
||||
this.setLayout(layout);
|
||||
layout.setAutoCreateGaps(true);
|
||||
|
||||
var factory = new NodeGUIFactory(net, () -> this.updateAll());
|
||||
var gLabel = layout.createParallelGroup();
|
||||
var gBarch = layout.createParallelGroup();
|
||||
var vGroup = layout.createSequentialGroup();
|
||||
|
||||
for(var node: nodes) {
|
||||
var handle = net.getNode(node);
|
||||
var panel = factory.create(handle);
|
||||
update.add(panel);
|
||||
|
||||
var label = new JTextArea(net.getNodeName(handle));
|
||||
label.setEditable(false);
|
||||
label.setLineWrap(true);
|
||||
label.setWrapStyleWord(true);
|
||||
label.setOpaque(false);
|
||||
label.setBorder(BorderFactory.createEmptyBorder());
|
||||
this.setFont(label);
|
||||
|
||||
gLabel.addComponent(label);
|
||||
gBarch.addComponent(panel);
|
||||
vGroup.addGroup(layout.createParallelGroup()
|
||||
.addComponent(label)
|
||||
.addComponent(panel));
|
||||
}
|
||||
|
||||
var hGroup = layout.createSequentialGroup();
|
||||
hGroup.addGroup(gLabel).addGroup(gBarch);
|
||||
|
||||
layout.setVerticalGroup(vGroup);
|
||||
layout.setHorizontalGroup(hGroup);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utile per cambiare il font in BOLD e aumentarne la grandezza
|
||||
* @param component il componente da cambiare il font
|
||||
*/
|
||||
private void setFont(Component component) {
|
||||
var font = component.getFont();
|
||||
font = new Font(font.getName(), Font.BOLD, font.getSize() + 2);
|
||||
component.setFont(font);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateAll() {
|
||||
net.updateBeliefs();
|
||||
|
||||
for (var node : update)
|
||||
node.updateNode();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.berack.upo.ai;
|
||||
package net.berack.upo.ai.gui;
|
||||
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JPanel;
|
||||
@@ -17,4 +17,11 @@ public abstract class MyPanel extends JPanel {
|
||||
* @return il menu contestuale da aggiungere
|
||||
*/
|
||||
abstract public JMenu getMenu();
|
||||
|
||||
/**
|
||||
* Permette di fare l'update di qualunque componente interno del pannello.
|
||||
* Questo verrà utilizzato quando il pannello verrà mostrato in modo da
|
||||
* disegnare correttamente il pannello.
|
||||
*/
|
||||
abstract public void updateAll();
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package net.berack.upo.ai.gui.nodes;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.GridLayout;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.ButtonGroup;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JLabel;
|
||||
|
||||
import smile.Network;
|
||||
|
||||
/**
|
||||
* La rappresentazione grafica di un nodo a decisione.
|
||||
* Esso mostrerà gli outcome e i valori associati ad essi, e permetterà di sceglierne uno o l'altro.
|
||||
* Nel caso in cui ci siano più valori per outcome allora il nodo non sarà abilitato
|
||||
* @author Berack
|
||||
*/
|
||||
public class DecisionNodeGUI extends NodeGUI {
|
||||
|
||||
private final AbstractButton[] buttons;
|
||||
private final JLabel[] values;
|
||||
private final ButtonGroup group;
|
||||
|
||||
/**
|
||||
* Costruisce il nodo decisionale in modo che si possa interagire con esso
|
||||
* @param net la rete del nodo
|
||||
* @param node il nodo
|
||||
* @param action la azione da fare quando si preme su una decisione
|
||||
*/
|
||||
public DecisionNodeGUI(Network net, int node, Consumer<Integer> action) {
|
||||
super(net, node);
|
||||
|
||||
var outcomes = net.getOutcomeCount(node);
|
||||
this.buttons = new AbstractButton[outcomes];
|
||||
this.values = new JLabel[outcomes];
|
||||
|
||||
this.group = new ButtonGroup();
|
||||
var grid = new GridLayout(outcomes, 2);
|
||||
this.setLayout(grid);
|
||||
|
||||
for(var i = 0; i < outcomes; i++) {
|
||||
final var index = i;
|
||||
var label = net.getOutcomeId(node, i);
|
||||
var value = new JLabel();
|
||||
var button = new JCheckBox(label);
|
||||
button.setContentAreaFilled(false);
|
||||
button.setFocusable(false);
|
||||
button.addActionListener(a -> action.accept(index));
|
||||
|
||||
this.buttons[i] = button;
|
||||
this.values[i] = value;
|
||||
this.add(button);
|
||||
this.add(value);
|
||||
this.group.add(button);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNode() {
|
||||
var selected = this.net.isEvidence(this.node)? this.net.getEvidence(this.node) : -1;
|
||||
var values = this.net.getNodeValue(this.node);
|
||||
var max = -1;
|
||||
if(values.length == this.buttons.length) {
|
||||
max = 0;
|
||||
for(int i = 1; i < values.length; i++)
|
||||
if(values[max] < values[i])
|
||||
max = i;
|
||||
}
|
||||
|
||||
this.group.clearSelection();
|
||||
|
||||
for(var i = 0; i < this.buttons.length; i++) {
|
||||
var font = buttons[i].getFont();
|
||||
var style = (i == max)? (Font.BOLD + Font.ITALIC) : Font.PLAIN;
|
||||
var newFont = new Font(font.getName(), style, font.getSize());
|
||||
var value = max < 0? "" : String.format("% 5.2f", values[i]);
|
||||
|
||||
this.buttons[i].setFont(newFont);
|
||||
this.buttons[i].setSelected(i == selected);
|
||||
this.buttons[i].setEnabled(max != -1);
|
||||
this.values[i].setText(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
35
src/main/java/net/berack/upo/ai/gui/nodes/NodeGUI.java
Normal file
35
src/main/java/net/berack/upo/ai/gui/nodes/NodeGUI.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package net.berack.upo.ai.gui.nodes;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import smile.Network;
|
||||
|
||||
/**
|
||||
* Classe astratta che implementa un nodo base data la rete in input.
|
||||
* @author Berack
|
||||
*/
|
||||
public abstract class NodeGUI extends JPanel {
|
||||
|
||||
public final Network net;
|
||||
public final int node;
|
||||
|
||||
/**
|
||||
* Salva informazioni essenziali del nodo
|
||||
* I costruttori delle sottoclassi dovranno creare il contenuto del pannello
|
||||
* ed utilizzare questo costruttore.
|
||||
* I valori passati saranno poi disponibili alle proprietà pubbliche net e node.
|
||||
*
|
||||
* @param net la rete a cui appartiene
|
||||
* @param node il valore dell'handle
|
||||
*/
|
||||
protected NodeGUI(Network net, int node) {
|
||||
this.net = net;
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
/**
|
||||
* In questo metodo si deve fare un refresh dei valori mostrati nel pannello.
|
||||
* I valori potranno essere presi direttamente dalla rete utilizzando le proprietà pubbliche net e node.
|
||||
*/
|
||||
abstract public void updateNode();
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package net.berack.upo.ai.gui.nodes;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import smile.Network;
|
||||
import smile.Network.NodeType;
|
||||
|
||||
/**
|
||||
* Classe che raggruppa tutte le rappresentazioni grafiche dei nodi.
|
||||
* È una classe comoda per la creazione dei nodi dato che crea automaticamente
|
||||
* anche la funzione di update e scelta della evidenza per ogni nodo.
|
||||
* @author Berack
|
||||
*/
|
||||
public class NodeGUIFactory {
|
||||
|
||||
private final Network net;
|
||||
private final Runnable updateAll;
|
||||
|
||||
/**
|
||||
* Crea una factory pronta per la creazione dei nodi
|
||||
* @param net la rete
|
||||
* @param updateAll una funzione richiesta per l'update di tutti gli altri nodi
|
||||
*/
|
||||
public NodeGUIFactory(Network net, Runnable updateAll) {
|
||||
this.net = net;
|
||||
this.updateAll = updateAll;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crea una nuova rappresentazione grafica di un nodo passato in input.
|
||||
*
|
||||
* @throws IllegalArgumentException nel caso in cui il nodo non sia ancora supportato
|
||||
* @param handle il nodo
|
||||
* @return la rappresentazione grafica del nodo
|
||||
*/
|
||||
public NodeGUI create(int handle) {
|
||||
Consumer<Integer> action = outcome -> {
|
||||
if(net.isEvidence(handle) && net.getEvidence(handle) == outcome) this.net.clearEvidence(handle);
|
||||
else this.net.setEvidence(handle, outcome);
|
||||
|
||||
this.updateAll.run();
|
||||
};
|
||||
|
||||
return switch(net.getNodeType(handle)) {
|
||||
case NodeType.DECISION -> new DecisionNodeGUI(net, handle, action);
|
||||
case NodeType.UTILITY -> new UtilityNodeGUI(net, handle);
|
||||
case NodeType.MAU -> new UtilityNodeGUI(net, handle);
|
||||
case NodeType.NOISY_MAX -> new ProbabilityNodeGUI(net, handle, action);
|
||||
case NodeType.CPT -> new ProbabilityNodeGUI(net, handle, action);
|
||||
|
||||
default -> throw new IllegalArgumentException("Node type not supported! ");
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
package net.berack.upo.ai.gui.nodes;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.Label;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
|
||||
import smile.Network;
|
||||
|
||||
/**
|
||||
* La rappresentazione grafica di un nodo probabilistico.
|
||||
* Esso mostrerà gli outcome ele probabilità associate ad essi, e permetterà di sceglierne uno o l'altro.
|
||||
* Nel caso in cui ci siano più valori per outcome allora il nodo non sarà abilitato
|
||||
* @author Berack
|
||||
*/
|
||||
public class ProbabilityNodeGUI extends NodeGUI {
|
||||
|
||||
public static final Color[] COLORS = {
|
||||
new Color(255,127,0),
|
||||
new Color(0,127,255),
|
||||
new Color(0,255,127),
|
||||
new Color(255,0,127),
|
||||
new Color(127,0,255),
|
||||
new Color(127,255,0),
|
||||
};
|
||||
|
||||
private final JButton[] outcomes;
|
||||
private final Label[] valuesChart;
|
||||
private final JLabel[] valuesPercent;
|
||||
|
||||
/**
|
||||
* Costruisce il nodo probabilistico in modo che si possa interagire con esso
|
||||
* @param net la rete del nodo
|
||||
* @param node il nodo
|
||||
* @param action la azione da fare quando si preme su un outcome
|
||||
*/
|
||||
public ProbabilityNodeGUI(Network net, int node, Consumer<Integer> action) {
|
||||
super(net, node);
|
||||
var labels = net.getOutcomeIds(node);
|
||||
|
||||
var layout = new GridLayout(labels.length, 2);
|
||||
this.setLayout(layout);
|
||||
this.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(1, 0, 0, 0), BorderFactory.createLineBorder(Color.GRAY)));
|
||||
|
||||
this.outcomes = new JButton[labels.length];
|
||||
this.valuesChart = new Label[labels.length];
|
||||
this.valuesPercent = new JLabel[labels.length];
|
||||
|
||||
for(var i = 0; i < labels.length; i++) {
|
||||
var lName = new JButton(labels[i]);
|
||||
var lValue = new JLabel();
|
||||
var barchart = new Label();
|
||||
|
||||
this.outcomes[i] = lName;
|
||||
this.valuesChart[i] = barchart;
|
||||
this.valuesPercent[i] = lValue;
|
||||
|
||||
final var index = i;
|
||||
lName.setContentAreaFilled(false);
|
||||
lName.setFocusable(false);
|
||||
if(action == null) lName.setBorder(null);
|
||||
else lName.addActionListener(a -> action.accept(index));
|
||||
|
||||
var size = barchart.getPreferredSize();
|
||||
size.width = 100;
|
||||
size.height = 10;
|
||||
barchart.setPreferredSize(size);
|
||||
barchart.setBackground(COLORS[i % COLORS.length]);
|
||||
|
||||
|
||||
var panel1 = new JPanel();
|
||||
panel1.setLayout(new GridLayout(1, 2));
|
||||
panel1.add(lName);
|
||||
panel1.add(lValue);
|
||||
|
||||
var panel2 = new JPanel();
|
||||
panel2.setLayout(new BorderLayout());
|
||||
panel2.add(barchart, BorderLayout.LINE_START);
|
||||
|
||||
this.add(panel1);
|
||||
this.add(panel2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNode() {
|
||||
var values = this.net.getNodeValue(this.node);
|
||||
var evidence = this.net.isEvidence(this.node)? this.net.getEvidence(node) : -1;
|
||||
var enable = (values.length == this.outcomes.length);
|
||||
|
||||
for(var i = 0; i < this.outcomes.length; i++) {
|
||||
var value = values[i] * 100;
|
||||
var barchart = this.valuesChart[i];
|
||||
|
||||
var size = barchart.getPreferredSize();
|
||||
size.width = enable? (int) (value * 1.5) : 0;
|
||||
barchart.setSize(size);
|
||||
barchart.setPreferredSize(size);
|
||||
|
||||
this.valuesPercent[i].setText(enable? String.format("% 4.2f%%", value) : " ");
|
||||
if(evidence == i) this.outcomes[i].setForeground(Color.RED);
|
||||
else this.outcomes[i].setForeground(Color.BLACK);
|
||||
this.outcomes[i].setEnabled(enable);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package net.berack.upo.ai.gui.nodes;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
|
||||
import smile.Network;
|
||||
|
||||
/**
|
||||
* La rappresentazione grafica di un nodo utilità.
|
||||
* Esso mostrerà il valore solamente nel caso in cui esso sia l'unico.
|
||||
* @author Berack
|
||||
*/
|
||||
public class UtilityNodeGUI extends NodeGUI {
|
||||
|
||||
private final JLabel utility;
|
||||
|
||||
/**
|
||||
* Costruisce il nodo utilità che mostra il valore corrente
|
||||
* @param net la rete del nodo
|
||||
* @param node il nodo
|
||||
*/
|
||||
UtilityNodeGUI(Network net, int node) {
|
||||
super(net, node);
|
||||
|
||||
this.utility = new JLabel();
|
||||
var font = this.utility.getFont();
|
||||
font = new Font(font.getName(), Font.BOLD, font.getSize() + 5);
|
||||
|
||||
this.setLayout(new FlowLayout());
|
||||
|
||||
this.utility.setFont(font);
|
||||
this.utility.setForeground(Color.RED);
|
||||
|
||||
this.add(utility);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNode() {
|
||||
var values = this.net.getNodeValue(this.node);
|
||||
var val = (values.length == 1) ? String.format("% 5.2f", values[0]) : " ";
|
||||
this.utility.setText(val);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import javax.swing.JButton;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
|
||||
import net.berack.upo.ai.MyPanel;
|
||||
import net.berack.upo.ai.gui.MyPanel;
|
||||
import net.berack.upo.ai.problem1.Puzzle8.Move;
|
||||
|
||||
/**
|
||||
@@ -67,7 +67,8 @@ public class Puzzle8GUI extends MyPanel {
|
||||
*/
|
||||
public void shuffleGame() {
|
||||
do { this.puzzle.shuffle(); } while(!this.puzzle.isSolvable());
|
||||
redraw();
|
||||
this.solution.clear();
|
||||
this.updateAll();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,7 +78,7 @@ public class Puzzle8GUI extends MyPanel {
|
||||
*/
|
||||
public void solveGame() {
|
||||
this.solution = this.puzzle.solve();
|
||||
this.redraw();
|
||||
this.updateAll();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -86,7 +87,8 @@ public class Puzzle8GUI extends MyPanel {
|
||||
* allora verrà evidenziata una tessera con il colore rosso per indicare
|
||||
* la mossa migliore da fare per la risoluzione.
|
||||
*/
|
||||
public void redraw() {
|
||||
@Override
|
||||
public void updateAll() {
|
||||
MyComponent zero = null;
|
||||
|
||||
for(var arr: this.buttons) {
|
||||
@@ -101,7 +103,7 @@ public class Puzzle8GUI extends MyPanel {
|
||||
}
|
||||
}
|
||||
|
||||
higlightNextMove(zero);
|
||||
this.higlightNextMove(zero);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,7 +157,7 @@ public class Puzzle8GUI extends MyPanel {
|
||||
if(solution.size() > 0 && solution.remove(0) != move)
|
||||
solution.clear();
|
||||
|
||||
redraw();
|
||||
updateAll();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JSeparator;
|
||||
|
||||
import net.berack.upo.ai.MyPanel;
|
||||
import net.berack.upo.ai.gui.MyPanel;
|
||||
|
||||
/**
|
||||
* Classe che permette di visualizzare graficamente il gioco Tris
|
||||
@@ -72,14 +72,15 @@ public class TrisGUI extends MyPanel {
|
||||
this.tris = new Tris();
|
||||
this.ai = this.ai == null? null:new TrisAi(this.tris);
|
||||
if(this.ai != null && aiFirst.getState()) this.ai.playNext();
|
||||
redraw();
|
||||
this.updateAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Dopo questo metodo la finestra verrà ridisegnata (sempre se ci sono stati dei cambiamenti)
|
||||
* Nel caso in cui ci sia un vincitore il tris verrà colorato di rosso
|
||||
*/
|
||||
public void redraw() {
|
||||
@Override
|
||||
public void updateAll() {
|
||||
for(var arr: this.buttons) {
|
||||
for(var button: arr) {
|
||||
var value = tris.get(button.x, button.y);
|
||||
@@ -128,7 +129,7 @@ public class TrisGUI extends MyPanel {
|
||||
if(tris.isPlayAvailable(x, y) && !tris.isFinished()) {
|
||||
tris.play(x, y);
|
||||
if(ai != null && !tris.isFinished()) ai.playNext();
|
||||
redraw();
|
||||
updateAll();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -7,14 +7,16 @@ import java.util.Collection;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.GroupLayout;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JSeparator;
|
||||
import javax.swing.JTextArea;
|
||||
|
||||
import net.berack.upo.ai.MyPanel;
|
||||
import net.berack.upo.ai.gui.MyPanel;
|
||||
|
||||
/**
|
||||
* Classe usata per far vedere il risultato di una run di lw su un network
|
||||
@@ -26,7 +28,7 @@ public class LikelihoodWeightingGUI extends MyPanel {
|
||||
private OutcomeChartGUI[] chartGUI = null;
|
||||
|
||||
private final JPanel scroll = new JPanel(); // tried using JScrollPane but nothing shows up
|
||||
private final int totalRuns = 1000;
|
||||
private int totalRuns = 1000;
|
||||
|
||||
/**
|
||||
* Crea il pannello con gli elementi di default.
|
||||
@@ -65,7 +67,7 @@ public class LikelihoodWeightingGUI extends MyPanel {
|
||||
var net = SmileLib.getNetworkFrom(fileName);
|
||||
this.lw = new LikelihoodWeighting(net);
|
||||
this.chartGUI = null;
|
||||
this.updateLW();
|
||||
this.updateAll();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -74,7 +76,10 @@ public class LikelihoodWeightingGUI extends MyPanel {
|
||||
/**
|
||||
* Esegue l'algoritmo sul network corrente e mostra i risultati
|
||||
*/
|
||||
private void updateLW() {
|
||||
@Override
|
||||
public void updateAll() {
|
||||
if(this.lw == null) return;
|
||||
|
||||
this.lw.updateNetwork(totalRuns);
|
||||
var nodes = this.lw.getAllNodes();
|
||||
|
||||
@@ -103,6 +108,20 @@ public class LikelihoodWeightingGUI extends MyPanel {
|
||||
var gBarch = layout.createParallelGroup();
|
||||
var vGroup = layout.createSequentialGroup();
|
||||
|
||||
var totLabel = new JLabel("Total Runs");
|
||||
var totValue = new JComboBox<>(new Integer[] {this.totalRuns, 5 * this.totalRuns, 10 * this.totalRuns, 20 * this.totalRuns});
|
||||
totValue.addItemListener(a -> this.totalRuns = (Integer) totValue.getSelectedItem());
|
||||
|
||||
var font = totLabel.getFont();
|
||||
font = new Font(font.getName(), Font.BOLD, font.getSize() + 2);
|
||||
totLabel.setFont(font);
|
||||
|
||||
gLabel.addComponent(totLabel);
|
||||
gBarch.addComponent(totValue);
|
||||
vGroup.addGroup(layout.createParallelGroup()
|
||||
.addComponent(totLabel)
|
||||
.addComponent(totValue));
|
||||
|
||||
this.chartGUI = new OutcomeChartGUI[nodes.size()];
|
||||
var i = 0;
|
||||
|
||||
@@ -121,11 +140,11 @@ public class LikelihoodWeightingGUI extends MyPanel {
|
||||
if(net.isEvidence(handle) && net.getEvidence(handle) == e)
|
||||
net.clearEvidence(handle);
|
||||
else net.setEvidence(handle, e);
|
||||
this.updateLW();
|
||||
this.updateAll();
|
||||
});
|
||||
this.chartGUI[i++] = barch;
|
||||
|
||||
var font = label.getFont();
|
||||
font = label.getFont();
|
||||
font = new Font(font.getName(), Font.BOLD, font.getSize() + 2);
|
||||
label.setFont(font);
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
</decision>
|
||||
<decision id="Migliorare_la_Qualià">
|
||||
<decision id="Migliorare_la_Qualità">
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
<parents>Effettuare_la_Ricerca</parents>
|
||||
@@ -14,7 +14,7 @@
|
||||
<cpt id="Qualità_Prodotto">
|
||||
<state id="Standard" />
|
||||
<state id="Alta" />
|
||||
<parents>Migliorare_la_Qualià</parents>
|
||||
<parents>Migliorare_la_Qualità</parents>
|
||||
<probabilities>0.15 0.85 0.5 0.5</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Domanda_Mercato">
|
||||
@@ -27,24 +27,25 @@
|
||||
<utilities>-1000 0</utilities>
|
||||
</utility>
|
||||
<utility id="Costo_Prototipo">
|
||||
<parents>Migliorare_la_Qualià</parents>
|
||||
<parents>Migliorare_la_Qualità</parents>
|
||||
<utilities>-5000 0</utilities>
|
||||
</utility>
|
||||
<cpt id="Profitto">
|
||||
<state id="Nessumo" />
|
||||
<state id="Basso" />
|
||||
<noisymax id="Profitto">
|
||||
<state id="Alto" />
|
||||
<state id="Basso" />
|
||||
<state id="Nessuno" />
|
||||
<parents>Domanda_Mercato Qualità_Prodotto</parents>
|
||||
<probabilities>0.99 0.008999999999999999 0.001 0.85 0.145 0.005 0.1 0.8 0.1 0.001 0.85 0.149</probabilities>
|
||||
</cpt>
|
||||
<strengths>1 0 1 0</strengths>
|
||||
<parameters>0.9 0.099 0.001 0 0 1 0.7 0.27 0.03000000000000003 0 0 1 0.1 0.5 0.4</parameters>
|
||||
</noisymax>
|
||||
<decision id="Produzione">
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
<parents>Migliorare_la_Qualià Effettuare_la_Ricerca</parents>
|
||||
<parents>Migliorare_la_Qualità Effettuare_la_Ricerca</parents>
|
||||
</decision>
|
||||
<utility id="Valore_Profitto">
|
||||
<utility id="Valore_Ricavo">
|
||||
<parents>Produzione Profitto</parents>
|
||||
<utilities>0 10000 50000 0 0 0</utilities>
|
||||
<utilities>50000 10000 0 0 0 0</utilities>
|
||||
</utility>
|
||||
<cpt id="Ricerca_di_Mercato">
|
||||
<state id="Bassa" />
|
||||
@@ -56,6 +57,10 @@
|
||||
<parents>Produzione</parents>
|
||||
<utilities>-2500 0</utilities>
|
||||
</utility>
|
||||
<mau id="Valore_Profitto">
|
||||
<parents>Costo_di_Ricerca Costo_Prototipo Costo_Produzione Valore_Ricavo</parents>
|
||||
<weights>1 1 1 1</weights>
|
||||
</mau>
|
||||
</nodes>
|
||||
<extensions>
|
||||
<genie version="1.0" app="GeNIe 4.1.3402.0 ACADEMIC" name="Prototipo">
|
||||
@@ -84,8 +89,8 @@
|
||||
<position>209 88 290 154</position>
|
||||
<barchart active="true" width="128" height="64" />
|
||||
</node>
|
||||
<node id="Migliorare_la_Qualià">
|
||||
<name>Migliorare la Qualià</name>
|
||||
<node id="Migliorare_la_Qualità">
|
||||
<name>Migliorare la Qualità</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
@@ -105,8 +110,8 @@
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>39 216 127 262</position>
|
||||
<barchart active="true" />
|
||||
<position>36 216 124 262</position>
|
||||
<barchart active="true" width="128" height="64" />
|
||||
</node>
|
||||
<node id="Profitto">
|
||||
<name>Profitto</name>
|
||||
@@ -116,8 +121,8 @@
|
||||
<position>600 228 651 259</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Valore_Profitto">
|
||||
<name>Valore Profitto</name>
|
||||
<node id="Valore_Ricavo">
|
||||
<name>Valore Ricavo</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
@@ -145,8 +150,16 @@
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>44 337 132 390</position>
|
||||
<barchart active="true" />
|
||||
<position>37 339 125 392</position>
|
||||
<barchart active="true" width="134" height="64" />
|
||||
</node>
|
||||
<node id="Valore_Profitto">
|
||||
<name>Valore Profitto</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>28 458 138 539</position>
|
||||
<barchart active="true" width="128" height="64" />
|
||||
</node>
|
||||
</genie>
|
||||
</extensions>
|
||||
|
||||
706
src/main/resources/Veicolo unrolled.xdsl
Normal file
706
src/main/resources/Veicolo unrolled.xdsl
Normal file
@@ -0,0 +1,706 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- This network was created in GeNIe Academic, which can be used for academic teaching and research purposes only -->
|
||||
<smile version="1.0" id="Veicolo" numsamples="10000" discsamples="10000">
|
||||
<nodes>
|
||||
<cpt id="Posizione">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<probabilities>0 1 0</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Condizioni_Meteo">
|
||||
<state id="Normale" />
|
||||
<state id="Umido" />
|
||||
<probabilities>0.5 0.5</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Stato_Terreno">
|
||||
<state id="Normale" />
|
||||
<state id="Sconnesso" />
|
||||
<probabilities>0.5 0.5</probabilities>
|
||||
</cpt>
|
||||
<noisymax id="Guasto">
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
<parents>Condizioni_Meteo Stato_Terreno</parents>
|
||||
<strengths>1 0 1 0</strengths>
|
||||
<parameters>0.1 0.9 0 1 0.5 0.5 0 1 0.001 0.999</parameters>
|
||||
</noisymax>
|
||||
<noisymax id="Accuratezza_Sensore">
|
||||
<state id="Pessima" />
|
||||
<state id="Buona" />
|
||||
<state id="Ottima" />
|
||||
<parents>Guasto Condizioni_Meteo Stato_Terreno</parents>
|
||||
<strengths>0 1 1 0 1 0</strengths>
|
||||
<parameters>1 0 0 0 0 1 0.3 0.15 0.5499999999999999 0 0 1 0.6 0.3 0.1 0 0 1 0.000299999999999967 0.0007 0.999</parameters>
|
||||
</noisymax>
|
||||
<cpt id="Sensore_Posizione">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Accuratezza_Sensore Posizione</parents>
|
||||
<probabilities>0.35 0.325 0.325 0.325 0.35 0.325 0.325 0.325 0.35 0.9 0.05 0.05 0.05 0.8999999999999999 0.05 0.05 0.05 0.8999999999999999 0.99 0.005 0.005 0.005 0.99 0.005 0.005 0.005 0.99</probabilities>
|
||||
</cpt>
|
||||
<decision id="Comando">
|
||||
<state id="Left" />
|
||||
<state id="Stay" />
|
||||
<state id="Right" />
|
||||
<parents>Sensore_Posizione</parents>
|
||||
</decision>
|
||||
<utility id="Utilità">
|
||||
<parents>Posizione</parents>
|
||||
<utilities>-100 100 -100</utilities>
|
||||
</utility>
|
||||
<cpt id="Condizioni_Meteo_1">
|
||||
<state id="Normale" />
|
||||
<state id="Umido" />
|
||||
<parents>Condizioni_Meteo</parents>
|
||||
<probabilities>0.9 0.1 0.1 0.9</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Condizioni_Meteo_2">
|
||||
<state id="Normale" />
|
||||
<state id="Umido" />
|
||||
<parents>Condizioni_Meteo_1</parents>
|
||||
<probabilities>0.9 0.1 0.1 0.9</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Condizioni_Meteo_3">
|
||||
<state id="Normale" />
|
||||
<state id="Umido" />
|
||||
<parents>Condizioni_Meteo_2</parents>
|
||||
<probabilities>0.9 0.1 0.1 0.9</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Condizioni_Meteo_4">
|
||||
<state id="Normale" />
|
||||
<state id="Umido" />
|
||||
<parents>Condizioni_Meteo_3</parents>
|
||||
<probabilities>0.9 0.1 0.1 0.9</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Stato_Terreno_1">
|
||||
<state id="Normale" />
|
||||
<state id="Sconnesso" />
|
||||
<parents>Stato_Terreno</parents>
|
||||
<probabilities>0.8 0.2 0.7 0.3</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Stato_Terreno_2">
|
||||
<state id="Normale" />
|
||||
<state id="Sconnesso" />
|
||||
<parents>Stato_Terreno_1</parents>
|
||||
<probabilities>0.8 0.2 0.7 0.3</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Stato_Terreno_3">
|
||||
<state id="Normale" />
|
||||
<state id="Sconnesso" />
|
||||
<parents>Stato_Terreno_2</parents>
|
||||
<probabilities>0.8 0.2 0.7 0.3</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Stato_Terreno_4">
|
||||
<state id="Normale" />
|
||||
<state id="Sconnesso" />
|
||||
<parents>Stato_Terreno_3</parents>
|
||||
<probabilities>0.8 0.2 0.7 0.3</probabilities>
|
||||
</cpt>
|
||||
<noisymax id="Guasto_1">
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
<parents>Condizioni_Meteo_1 Stato_Terreno_1 Guasto</parents>
|
||||
<strengths>1 0 1 0 0 1</strengths>
|
||||
<parameters>0.1 0.9 0 1 0.5 0.5 0 1 1 0 0 1 0.001 0.999</parameters>
|
||||
</noisymax>
|
||||
<noisymax id="Guasto_2">
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
<parents>Condizioni_Meteo_2 Stato_Terreno_2 Guasto_1</parents>
|
||||
<strengths>1 0 1 0 0 1</strengths>
|
||||
<parameters>0.1 0.9 0 1 0.5 0.5 0 1 1 0 0 1 0.001 0.999</parameters>
|
||||
</noisymax>
|
||||
<noisymax id="Guasto_3">
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
<parents>Condizioni_Meteo_3 Stato_Terreno_3 Guasto_2</parents>
|
||||
<strengths>1 0 1 0 0 1</strengths>
|
||||
<parameters>0.1 0.9 0 1 0.5 0.5 0 1 1 0 0 1 0.001 0.999</parameters>
|
||||
</noisymax>
|
||||
<noisymax id="Guasto_4">
|
||||
<state id="Si" />
|
||||
<state id="No" />
|
||||
<parents>Condizioni_Meteo_4 Stato_Terreno_4 Guasto_3</parents>
|
||||
<strengths>1 0 1 0 0 1</strengths>
|
||||
<parameters>0.1 0.9 0 1 0.5 0.5 0 1 1 0 0 1 0.001 0.999</parameters>
|
||||
</noisymax>
|
||||
<noisymax id="Accuratezza_Sensore_4">
|
||||
<state id="Pessima" />
|
||||
<state id="Buona" />
|
||||
<state id="Ottima" />
|
||||
<parents>Guasto_4 Condizioni_Meteo_4 Stato_Terreno_4</parents>
|
||||
<strengths>0 1 1 0 1 0</strengths>
|
||||
<parameters>1 0 0 0 0 1 0.3 0.15 0.5499999999999999 0 0 1 0.6 0.3 0.1 0 0 1 0.000299999999999967 0.0007 0.999</parameters>
|
||||
</noisymax>
|
||||
<cpt id="Posizione_1">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Posizione Comando</parents>
|
||||
<probabilities>0.9 0.05 0.04999999999999998 0.9 0.05 0.05 0.05 0.9 0.05 0.9 0.05 0.05 0.04999999999999998 0.9 0.05 0.04999999999999993 0.05 0.9 0.05 0.9 0.05 0.05 0.05 0.9 0.05 0.05 0.9</probabilities>
|
||||
</cpt>
|
||||
<noisymax id="Accuratezza_Sensore_1">
|
||||
<state id="Pessima" />
|
||||
<state id="Buona" />
|
||||
<state id="Ottima" />
|
||||
<parents>Guasto_1 Condizioni_Meteo_1 Stato_Terreno_1</parents>
|
||||
<strengths>0 1 1 0 1 0</strengths>
|
||||
<parameters>1 0 0 0 0 1 0.3 0.15 0.5499999999999999 0 0 1 0.6 0.3 0.1 0 0 1 0.000299999999999967 0.0007 0.999</parameters>
|
||||
</noisymax>
|
||||
<cpt id="Sensore_Posizione_1">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Accuratezza_Sensore_1 Posizione_1</parents>
|
||||
<probabilities>0.35 0.325 0.325 0.325 0.35 0.325 0.325 0.325 0.35 0.9 0.05 0.05 0.05 0.8999999999999999 0.05 0.05 0.05 0.8999999999999999 0.99 0.005 0.005 0.005 0.99 0.005 0.005 0.005 0.99</probabilities>
|
||||
</cpt>
|
||||
<decision id="Comando_1">
|
||||
<state id="Left" />
|
||||
<state id="Stay" />
|
||||
<state id="Right" />
|
||||
<parents>Sensore_Posizione_1 Comando</parents>
|
||||
</decision>
|
||||
<cpt id="Posizione_2">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Posizione_1 Comando_1</parents>
|
||||
<probabilities>0.9 0.05 0.04999999999999998 0.9 0.05 0.05 0.05 0.9 0.05 0.9 0.05 0.05 0.04999999999999998 0.9 0.05 0.04999999999999993 0.05 0.9 0.05 0.9 0.05 0.05 0.05 0.9 0.05 0.05 0.9</probabilities>
|
||||
</cpt>
|
||||
<noisymax id="Accuratezza_Sensore_2">
|
||||
<state id="Pessima" />
|
||||
<state id="Buona" />
|
||||
<state id="Ottima" />
|
||||
<parents>Guasto_2 Condizioni_Meteo_2 Stato_Terreno_2</parents>
|
||||
<strengths>0 1 1 0 1 0</strengths>
|
||||
<parameters>1 0 0 0 0 1 0.3 0.15 0.5499999999999999 0 0 1 0.6 0.3 0.1 0 0 1 0.000299999999999967 0.0007 0.999</parameters>
|
||||
</noisymax>
|
||||
<cpt id="Sensore_Posizione_2">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Accuratezza_Sensore_2 Posizione_2</parents>
|
||||
<probabilities>0.35 0.325 0.325 0.325 0.35 0.325 0.325 0.325 0.35 0.9 0.05 0.05 0.05 0.8999999999999999 0.05 0.05 0.05 0.8999999999999999 0.99 0.005 0.005 0.005 0.99 0.005 0.005 0.005 0.99</probabilities>
|
||||
</cpt>
|
||||
<decision id="Comando_2">
|
||||
<state id="Left" />
|
||||
<state id="Stay" />
|
||||
<state id="Right" />
|
||||
<parents>Sensore_Posizione_2 Comando_1</parents>
|
||||
</decision>
|
||||
<cpt id="Posizione_3">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Posizione_2 Comando_2</parents>
|
||||
<probabilities>0.9 0.05 0.04999999999999998 0.9 0.05 0.05 0.05 0.9 0.05 0.9 0.05 0.05 0.04999999999999998 0.9 0.05 0.04999999999999993 0.05 0.9 0.05 0.9 0.05 0.05 0.05 0.9 0.05 0.05 0.9</probabilities>
|
||||
</cpt>
|
||||
<noisymax id="Accuratezza_Sensore_3">
|
||||
<state id="Pessima" />
|
||||
<state id="Buona" />
|
||||
<state id="Ottima" />
|
||||
<parents>Guasto_3 Condizioni_Meteo_3 Stato_Terreno_3</parents>
|
||||
<strengths>0 1 1 0 1 0</strengths>
|
||||
<parameters>1 0 0 0 0 1 0.3 0.15 0.5499999999999999 0 0 1 0.6 0.3 0.1 0 0 1 0.000299999999999967 0.0007 0.999</parameters>
|
||||
</noisymax>
|
||||
<cpt id="Sensore_Posizione_3">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Accuratezza_Sensore_3 Posizione_3</parents>
|
||||
<probabilities>0.35 0.325 0.325 0.325 0.35 0.325 0.325 0.325 0.35 0.9 0.05 0.05 0.05 0.8999999999999999 0.05 0.05 0.05 0.8999999999999999 0.99 0.005 0.005 0.005 0.99 0.005 0.005 0.005 0.99</probabilities>
|
||||
</cpt>
|
||||
<decision id="Comando_3">
|
||||
<state id="Left" />
|
||||
<state id="Stay" />
|
||||
<state id="Right" />
|
||||
<parents>Sensore_Posizione_3 Comando_2</parents>
|
||||
</decision>
|
||||
<cpt id="Posizione_4">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Posizione_3 Comando_3</parents>
|
||||
<probabilities>0.9 0.05 0.04999999999999998 0.9 0.05 0.05 0.05 0.9 0.05 0.9 0.05 0.05 0.04999999999999998 0.9 0.05 0.04999999999999993 0.05 0.9 0.05 0.9 0.05 0.05 0.05 0.9 0.05 0.05 0.9</probabilities>
|
||||
</cpt>
|
||||
<cpt id="Sensore_Posizione_4">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Accuratezza_Sensore_4 Posizione_4</parents>
|
||||
<probabilities>0.35 0.325 0.325 0.325 0.35 0.325 0.325 0.325 0.35 0.9 0.05 0.05 0.05 0.8999999999999999 0.05 0.05 0.05 0.8999999999999999 0.99 0.005 0.005 0.005 0.99 0.005 0.005 0.005 0.99</probabilities>
|
||||
</cpt>
|
||||
<decision id="Comando_4">
|
||||
<state id="Left" />
|
||||
<state id="Stay" />
|
||||
<state id="Right" />
|
||||
<parents>Sensore_Posizione_4 Comando_3</parents>
|
||||
</decision>
|
||||
<cpt id="Posizione_Finale">
|
||||
<state id="Left" />
|
||||
<state id="Middle" />
|
||||
<state id="Right" />
|
||||
<parents>Comando_4 Posizione_4</parents>
|
||||
<probabilities>0.9 0.05 0.04999999999999998 0.9 0.05 0.05 0.05 0.9 0.05 0.9 0.05 0.05 0.04999999999999998 0.9 0.05 0.04999999999999993 0.05 0.9 0.05 0.9 0.05 0.05 0.05 0.9 0.05 0.05 0.9</probabilities>
|
||||
</cpt>
|
||||
<utility id="Utilità_Finale">
|
||||
<parents>Posizione_Finale</parents>
|
||||
<utilities>-100 100 -100</utilities>
|
||||
</utility>
|
||||
<mau id="Somma_Parziale">
|
||||
<parents>Utilità</parents>
|
||||
<weights>1</weights>
|
||||
</mau>
|
||||
<utility id="Utilità_4">
|
||||
<parents>Posizione_4</parents>
|
||||
<utilities>-100 100 -100</utilities>
|
||||
</utility>
|
||||
<utility id="Utilità_3">
|
||||
<parents>Posizione_3</parents>
|
||||
<utilities>-100 100 -100</utilities>
|
||||
</utility>
|
||||
<utility id="Utilità_2">
|
||||
<parents>Posizione_2</parents>
|
||||
<utilities>-100 100 -100</utilities>
|
||||
</utility>
|
||||
<utility id="Utilità_1">
|
||||
<parents>Posizione_1</parents>
|
||||
<utilities>-100 100 -100</utilities>
|
||||
</utility>
|
||||
<mau id="Somma_Parziale_1">
|
||||
<parents>Utilità_1 Somma_Parziale</parents>
|
||||
<weights>1 1</weights>
|
||||
</mau>
|
||||
<mau id="Somma_Parziale_2">
|
||||
<parents>Utilità_2 Somma_Parziale_1</parents>
|
||||
<weights>1 1</weights>
|
||||
</mau>
|
||||
<mau id="Somma_Parziale_3">
|
||||
<parents>Utilità_3 Somma_Parziale_2</parents>
|
||||
<weights>1 1</weights>
|
||||
</mau>
|
||||
<mau id="Somma_Parziale_4">
|
||||
<parents>Utilità_4 Somma_Parziale_3</parents>
|
||||
<weights>1 1</weights>
|
||||
</mau>
|
||||
<mau id="Somma_Utilità">
|
||||
<parents>Utilità_Finale Somma_Parziale_4</parents>
|
||||
<weights>1 1</weights>
|
||||
</mau>
|
||||
</nodes>
|
||||
<extensions>
|
||||
<genie version="1.0" app="GeNIe 4.1.3402.0 ACADEMIC" name="Veicolo unrolled">
|
||||
<node id="Posizione">
|
||||
<name>Posizione</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>232 386 308 432</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Condizioni_Meteo">
|
||||
<name>Condizioni Meteo</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>140 47 231 103</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Stato_Terreno">
|
||||
<name>Stato Terreno</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>314 180 392 228</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Guasto">
|
||||
<name>Guasto</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>313 51 393 100</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Accuratezza_Sensore">
|
||||
<name>Accuratezza Sensore</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>142 179 228 229</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Sensore_Posizione">
|
||||
<name>Sensore Posizione</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>148 285 223 337</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Comando">
|
||||
<name>Comando</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>308 292 398 334</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Utilità">
|
||||
<name>Utilità</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>234 507 305 551</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Posizione_Finale">
|
||||
<name>Posizione Finale</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2653 289 2729 335</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Utilità_Finale">
|
||||
<name>Utilità Finale</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2657 386 2728 430</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Somma_Parziale">
|
||||
<name>Somma Parziale</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>430 513 509 545</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Somma_Utilità">
|
||||
<name>Somma Utilità</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2656 503 2729 551</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<textbox>
|
||||
<caption>Step0</caption>
|
||||
<font color="696969" name="Arial" size="7" />
|
||||
<position>247 576 271 588</position>
|
||||
</textbox>
|
||||
<textbox>
|
||||
<caption>Step1</caption>
|
||||
<font color="696969" name="Arial" size="7" />
|
||||
<position>754 576 778 588</position>
|
||||
</textbox>
|
||||
<textbox>
|
||||
<caption>Step2</caption>
|
||||
<font color="696969" name="Arial" size="7" />
|
||||
<position>1261 576 1285 588</position>
|
||||
</textbox>
|
||||
<textbox>
|
||||
<caption>Step3</caption>
|
||||
<font color="696969" name="Arial" size="7" />
|
||||
<position>1768 576 1792 588</position>
|
||||
</textbox>
|
||||
<textbox>
|
||||
<caption>Step4</caption>
|
||||
<font color="696969" name="Arial" size="7" />
|
||||
<position>2275 576 2299 588</position>
|
||||
</textbox>
|
||||
<node id="Posizione_1">
|
||||
<name>Posizione (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>739 406 815 452</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Condizioni_Meteo_1">
|
||||
<name>Condizioni Meteo (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>647 67 738 123</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Stato_Terreno_1">
|
||||
<name>Stato Terreno (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>821 200 899 248</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Guasto_1">
|
||||
<name>Guasto (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>820 71 900 120</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Accuratezza_Sensore_1">
|
||||
<name>Accuratezza Sensore (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>649 199 735 249</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Sensore_Posizione_1">
|
||||
<name>Sensore Posizione (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>655 305 730 357</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Comando_1">
|
||||
<name>Comando (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>815 312 905 354</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Utilità_1">
|
||||
<name>Utilità (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>741 527 812 571</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Somma_Parziale_1">
|
||||
<name>Somma Parziale (t=1)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>937 533 1016 565</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Posizione_2">
|
||||
<name>Posizione (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1246 386 1322 432</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Condizioni_Meteo_2">
|
||||
<name>Condizioni Meteo (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1154 47 1245 103</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Stato_Terreno_2">
|
||||
<name>Stato Terreno (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1328 180 1406 228</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Guasto_2">
|
||||
<name>Guasto (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1327 51 1407 100</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Accuratezza_Sensore_2">
|
||||
<name>Accuratezza Sensore (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1156 179 1242 229</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Sensore_Posizione_2">
|
||||
<name>Sensore Posizione (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1162 285 1237 337</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Comando_2">
|
||||
<name>Comando (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1322 292 1412 334</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Utilità_2">
|
||||
<name>Utilità (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1248 507 1319 551</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Somma_Parziale_2">
|
||||
<name>Somma Parziale (t=2)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1444 513 1523 545</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Posizione_3">
|
||||
<name>Posizione (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1753 406 1829 452</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Condizioni_Meteo_3">
|
||||
<name>Condizioni Meteo (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1661 67 1752 123</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Stato_Terreno_3">
|
||||
<name>Stato Terreno (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1835 200 1913 248</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Guasto_3">
|
||||
<name>Guasto (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1834 71 1914 120</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Accuratezza_Sensore_3">
|
||||
<name>Accuratezza Sensore (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1663 199 1749 249</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Sensore_Posizione_3">
|
||||
<name>Sensore Posizione (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1669 305 1744 357</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Comando_3">
|
||||
<name>Comando (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1829 312 1919 354</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Utilità_3">
|
||||
<name>Utilità (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1755 527 1826 571</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Somma_Parziale_3">
|
||||
<name>Somma Parziale (t=3)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>1951 533 2030 565</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Posizione_4">
|
||||
<name>Posizione (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2260 386 2336 432</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Condizioni_Meteo_4">
|
||||
<name>Condizioni Meteo (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2168 47 2259 103</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Stato_Terreno_4">
|
||||
<name>Stato Terreno (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2342 180 2420 228</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Guasto_4">
|
||||
<name>Guasto (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2341 51 2421 100</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Accuratezza_Sensore_4">
|
||||
<name>Accuratezza Sensore (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2170 179 2256 229</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Sensore_Posizione_4">
|
||||
<name>Sensore Posizione (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2176 285 2251 337</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Comando_4">
|
||||
<name>Comando (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2336 292 2426 334</position>
|
||||
<barchart active="true" width="128" height="72" />
|
||||
</node>
|
||||
<node id="Utilità_4">
|
||||
<name>Utilità (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2262 507 2333 551</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
<node id="Somma_Parziale_4">
|
||||
<name>Somma Parziale (t=4)</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>2458 513 2537 545</position>
|
||||
<barchart active="true" />
|
||||
</node>
|
||||
</genie>
|
||||
</extensions>
|
||||
</smile>
|
||||
@@ -57,10 +57,18 @@
|
||||
<parents>Comando Posizione</parents>
|
||||
<probabilities>0.9 0.05 0.04999999999999998 0.9 0.05 0.05 0.05 0.9 0.05 0.9 0.05 0.05 0.04999999999999998 0.9 0.05 0.04999999999999993 0.05 0.9 0.05 0.9 0.05 0.05 0.05 0.9 0.05 0.05 0.9</probabilities>
|
||||
</cpt>
|
||||
<utility id="Utilità_2" dynamic="terminal">
|
||||
<utility id="Utilità_Finale" dynamic="terminal">
|
||||
<parents>Posizione_Finale</parents>
|
||||
<utilities>-100 100 -100</utilities>
|
||||
</utility>
|
||||
<mau id="Somma_Parziale" dynamic="plate">
|
||||
<parents>Utilità</parents>
|
||||
<weights>1</weights>
|
||||
</mau>
|
||||
<mau id="Somma_Utilità" dynamic="terminal">
|
||||
<parents>Utilità_Finale Somma_Parziale</parents>
|
||||
<weights>1 1</weights>
|
||||
</mau>
|
||||
</nodes>
|
||||
<dynamic numslices="5">
|
||||
<cpt id="Posizione" order="1">
|
||||
@@ -83,6 +91,10 @@
|
||||
<decision id="Comando" order="1">
|
||||
<parents>Comando</parents>
|
||||
</decision>
|
||||
<mau id="Somma_Parziale" order="1">
|
||||
<parents>Somma_Parziale</parents>
|
||||
<weights>1 1</weights>
|
||||
</mau>
|
||||
</dynamic>
|
||||
<extensions>
|
||||
<genie version="1.0" app="GeNIe 4.1.3402.0 ACADEMIC" name="Veicolo">
|
||||
@@ -160,7 +172,7 @@
|
||||
<position>625 289 701 335</position>
|
||||
<barchart width="128" height="108" />
|
||||
</node>
|
||||
<node id="Utilità_2">
|
||||
<node id="Utilità_Finale">
|
||||
<name>Utilità Finale</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
@@ -168,6 +180,20 @@
|
||||
<position>629 386 700 430</position>
|
||||
<barchart width="128" height="64" />
|
||||
</node>
|
||||
<node id="Somma_Parziale">
|
||||
<name>Somma Parziale</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>430 513 509 545</position>
|
||||
</node>
|
||||
<node id="Somma_Utilità">
|
||||
<name>Somma Utilità</name>
|
||||
<interior color="e5f6f7" />
|
||||
<outline color="000080" />
|
||||
<font color="000000" name="Arial" size="8" />
|
||||
<position>628 503 701 551</position>
|
||||
</node>
|
||||
</genie>
|
||||
</extensions>
|
||||
</smile>
|
||||
|
||||
Reference in New Issue
Block a user