public code v1

This commit is contained in:
2026-05-22 11:14:29 +02:00
parent 427197ec5a
commit b8141736eb
28859 changed files with 575079 additions and 0 deletions
@@ -0,0 +1,133 @@
package afryca.consensusmodel.zhang2011minimumcost;
import java.util.ArrayList;
import afryca.ase.RunnableScript;
import afryca.cm.CM;
import afryca.consensusmodel.ConsensusEngine;
import afryca.consensusmodel.ConsensusModel;
import afryca.consensusmodel.definition.EResultElements;
import afryca.fpr.FPR;
import afryca.structure.Structure;
import afryca.consensumodel.addon.E4DIAddon;
public class Zhang2011MinimumCost extends ConsensusModel {
private static final String CONSENSUS_MODEL_NAME = "G. Zhang et al. (2011)"; //$NON-NLS-1$
private static final String EPSILON = "epsilon"; //$NON-NLS-1$ //
private static final String COST = "costes"; //$NON-NLS-1$ //
private Float epsilon;
private Integer [] cost;
private float consensusDegree;
private FPR[] preferencesWithoutGroup;
@Override
protected void setModelConfiguration() {
}
@Override
protected void obtainConfigurationValues() {
epsilon = (Float) configuration.getValue(EPSILON);
cost = (Integer[]) configuration.getValue(COST);
preferencesWithoutGroup = new FPR[preferences.length - 1];
initializePreferencesWithoutGroup();
}
private void initializePreferencesWithoutGroup() {
// Copy preferences except groupal
for (int i = 0; i < preferences.length - 1; i++) {
try {
preferencesWithoutGroup[i] = (FPR) preferences[i].clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
@Override
protected Float[][][] obtainVisualizeValues() {
Structure[] auxPreferences = clonePreferencesUnion(preferences, ConsensusEngine.groupPreferences(numberOfExperts, numberOfAlternatives, preferences));
Float[][][] preferencesGroupVisualization = new Float[numberOfExperts + 1][numberOfAlternatives][numberOfAlternatives];
for (int k = 0; k < numberOfExperts+1; k++) {
preferencesGroupVisualization[k] = auxPreferences[k].obtainVisualizeValues();
}
return preferencesGroupVisualization;
}
@Override
protected void preFirstSaveRoundResults() {
Structure[] auxPreferences = clonePreferencesUnion(preferences, ConsensusEngine.groupPreferences(numberOfExperts, numberOfAlternatives, preferences));
computeConsensusDegree();
computeCollective();
preSaveRoundResult(1, auxPreferences,obtainVisualizeValues(), consensusDegree);
result.put(EResultElements.initial_consensus_degree,consensusDegree);
result.put(EResultElements.maxround, 1);
result.put(EResultElements.consensus_threshold, epsilon);
result.put(EResultElements.consensus_model, CONSENSUS_MODEL_NAME);
}
@Override
protected void preSaveRoundResults() {
computeConsensusDegree();
computeCollective();
preSaveRoundResult(1, preferences,obtainVisualizeValues(), consensusDegree);
}
@Override
protected void posSaveRoundResults() {
computeConsensusDegree();
computeCollective();
posSaveRoundResult(preferences,obtainVisualizeValues(), consensusDegree, null);
}
@Override
protected boolean mustBeCarriedOutAnotherRound() {
return false;
}
@Override
protected void saveExecutionResults() {
this.configuration.setValue(PREFERENCES, preferences);
result.put(EResultElements.number_of_rounds_required, 1);
result.put(EResultElements.consensus_degree_achieved,consensusDegree);
}
@SuppressWarnings("unchecked")
@Override
protected void consensusRound() {
ArrayList<FPR> preferencesResult = (ArrayList<FPR>) ((RunnableScript) E4DIAddon.aseService.createExecutionBuilder()
.setFunction("Zhang2011MinimumCost")
.putVariable("epsilon", epsilon)
.putVariable("cost", cost)
.putVariable("pref", preferencesWithoutGroup)
.putVariable("alternatives", alternatives.length)
.execute())
.getResult();
int cont = 0;
for(FPR fpr: preferencesResult) {
preferences[cont] = fpr;
cont++;
}
}
private void computeCollective() {
preferences[numberOfExperts] = ConsensusEngine.groupPreferences(numberOfExperts, numberOfAlternatives,preferences);
}
private void computeConsensusDegree() {
CM[][] sm_matrices = ConsensusEngine.similarityMatrices(numberOfExperts, numberOfAlternatives, preferences);
CM consensusMatrix = ConsensusEngine.consensusMatrixBasedOnSimilarityBetweenFPRs(numberOfExperts,numberOfAlternatives, sm_matrices);
Float [] ca = ConsensusEngine.computeAlternativesConsensus(numberOfAlternatives, consensusMatrix);
consensusDegree = ConsensusEngine.consensusBasedOnAlternativesConsensus(numberOfAlternatives, ca);
}
}