package genius.gui.uncertainty; import javax.swing.JOptionPane; import genius.core.boaframework.SortedOutcomeSpace; import genius.core.listener.Listener; import genius.core.repository.ProfileRepItem; import genius.core.uncertainty.ComparisonGenerator; import genius.core.uncertainty.UNCERTAINTYTYPE; import genius.core.uncertainty.UncertainPreferenceContainer; import genius.core.utility.AbstractUtilitySpace; import genius.gui.panels.BooleanModel; import genius.gui.panels.TextModel; public class PairwiseComparisonModel { private ProfileRepItem profile; private TextModel uncertaintyModel = new TextModel("0.0"); private TextModel errorModel = new TextModel("0.0"); private int maxNumberOfComps; private BooleanModel experimentalModel = new BooleanModel(false); private BooleanModel confirmationModel = new BooleanModel(false); private UncertainPreferenceContainer uncertainPrefContainer = null; PairwiseComparisonModel(ProfileRepItem profile){ this.profile = profile; this.maxNumberOfComps = calculateMaxNumberOfComparisons(); connect(); } public int calculateMaxNumberOfComparisons() { SortedOutcomeSpace realSortedOutcomeSpace = new SortedOutcomeSpace((AbstractUtilitySpace) profile.create()); int comparisonsAmount = (new ComparisonGenerator(realSortedOutcomeSpace).generateAllOutcomeComparisons().size()); return comparisonsAmount; } public void connect() { confirmationModel.addListener (new Listener() { @Override public void notifyChange(Boolean data) { if (confirmationModel.getValue() == true) { uncertainPrefContainer = createContainer(); int amountOfComps = uncertainPrefContainer.getPairwiseCompUserModel().getBidComparisons().size(); double uncertaintyLevel = ((double) amountOfComps / (double) getMaxNumberofComps()); double errorRate = Double.parseDouble(getErrorModel().getText())*100; JOptionPane.showMessageDialog(null , "Pairwise Comparison User Model Created Successfully! \n\n" + "Number of Comparisons: " + amountOfComps +"\n" + "Level Of Uncertainty: " + (Math.round((1-uncertaintyLevel)*100)/100D)*100+"%\n" + "Error Rate: " + (Math.round((errorRate)*100)/100D)+"%"); } } }); } public ProfileRepItem getProfile() { return profile; } public UncertainPreferenceContainer createContainer() { int amountOfComps = (int)((1 - Double.parseDouble(getUncertaintyModel().getText())) * maxNumberOfComps); UncertainPreferenceContainer container ; if (experimentalModel.getValue() == true) { container = new UncertainPreferenceContainer((AbstractUtilitySpace) profile.create() , UNCERTAINTYTYPE.PAIRWISECOMP, amountOfComps , Double.parseDouble(getErrorModel().getText()), true); } else { container = new UncertainPreferenceContainer((AbstractUtilitySpace) profile.create() , UNCERTAINTYTYPE.PAIRWISECOMP, amountOfComps , Double.parseDouble(getErrorModel().getText()), false); } return container; } public TextModel getUncertaintyModel() { return uncertaintyModel; } public TextModel getErrorModel() { return errorModel; } public int getMaxNumberofComps() { return maxNumberOfComps; } public BooleanModel getConfirmationModel() { return confirmationModel; } public UncertainPreferenceContainer getUncertainPrefContainer() { return uncertainPrefContainer; } public BooleanModel getExperimentalModel() { return experimentalModel; } }