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,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1 @@
/bin/
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>afryca.consensusmodel.transrisk2018</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
@@ -0,0 +1,8 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: afryca.consensusmodel.transrisk2018;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: afryca.consensusmodel
Automatic-Module-Name: afryca.consensusmodel.transrisk2018
@@ -0,0 +1,10 @@
#Properties file for afryca.consensusmodel.transrisk2018
Bundle-Name = TRANSrisk2018
consensusmodel.name = TRANSrisk
consensusmodel.information = Transition pathways and risk analysis for climate change policies.
consensusmodel.features = Minimum cost using 2-tuple linguistic values.
consensusmodel.observations = Based on Zhang et al. consensus model, 'Minimum-cost consensus models under aggregation operators'.
variable.description.epsilon = Minimum distance to the collective allowed
variable.description.alpha = Consensus threshold
variable.description.cost = Cost
variable.description.weights = Experts' weigths
@@ -0,0 +1,10 @@
#Properties file for afryca.consensusmodel.transrisk2018
Bundle-Name = TRANSrisk2018
consensusmodel.name = TRANSrisk
consensusmodel.information = Transition pathways and risk analysis for climate change policies.
consensusmodel.features = Cálculo del mínimo coste partiendo de preferencias lingüísticas 2-tuplas.
consensusmodel.observations = Basado en el modelo de consenso Zhang et al., 'Minimum-cost consensus models under aggregation operators'.
variable.description.epsilon = Mínima distancia a la colectiva permitida
variable.description.alpha = Umbral de consenso
variable.description.cost = Coste
variable.description.weights = Pesos de expertos
@@ -0,0 +1,7 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.xml,\
OSGI-INF/l10n/bundle.properties,\
OSGI-INF/
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="afryca.consensusmodel">
<ConsensusModel
ConsensusModel="afryca.consensusmodel.transrisk2018.TRANSRisk2018"
Information="%consensusmodel.information"
MainFeatures="%consensusmodel.features"
Multicriteria="true"
Name="%consensusmodel.name"
Observations="%consensusmodel.observations"
Structure="afryca.decisionmatrix"
WithFeedback="false"
id="TRANSrisk2018">
<Variable
default_value="0.5"
description="%variable.description.epsilon"
id="epsilon"
is_array="false"
is_internal="false"
type="Float">
<Restriction
type="lower_limit"
value="0">
</Restriction>
<Restriction
type="upper_limit"
value="1">
</Restriction>
</Variable>
<Variable
default_value="0.8"
description="%variable.description.alpha"
id="alpha"
is_array="false"
is_internal="false"
type="Float">
<Restriction
type="lower_limit"
value="0">
</Restriction>
<Restriction
type="upper_limit"
value="1">
</Restriction>
</Variable>
<Variable
description="%variable.description.cost"
id="cost"
is_array="true"
is_internal="false"
type="Integer">
<Array_relation
type="number_of_elements_equals_to"
variable="experts">
</Array_relation>
</Variable>
<Variable
description="%variable.description.weights"
id="weights"
is_array="true"
is_internal="false"
type="Float">
<Array_restriction
type="element_lower_limit"
value="0">
</Array_restriction>
<Array_restriction
type="element_upper_limit"
value="1">
</Array_restriction>
<Array_relation
type="number_of_elements_equals_to"
variable="experts">
</Array_relation>
</Variable>
</ConsensusModel>
</extension>
</plugin>
@@ -0,0 +1,271 @@
package afryca.consensusmodel.transrisk2018;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import afryca.ase.RunnableScript;
import afryca.consensusmodel.ConsensusEngine;
import afryca.consensusmodel.ConsensusModelMulticriteria;
import afryca.consensusmodel.definition.EResultElements;
import afryca.decisionmatrix.DecisionMatrix;
import afryca.domain.fuzzyset.FuzzySet;
import afryca.structure.Structure;
import afryca.consensumodel.addon.E4DIAddon;
import afryca.twotuple.TwoTuple;
public class TRANSRisk2018 extends ConsensusModelMulticriteria {
private static final String CONSENSUS_MODEL_NAME = "TRANSrisk et al. (2018)"; //$NON-NLS-1$
private static final String EPSILON = "epsilon"; //$NON-NLS-1$ //
private static final String ALPHA = "alpha"; //$NON-NLS-1$ //
private static final String COST = "cost"; //$NON-NLS-1$ //
private static final String WEIGHTS = "weights"; //$NON-NLS-1$ //
private Float epsilon;
private Float alpha;
private Integer[] cost;
private Float[] weights;
private float consensusDegree;
private FuzzySet blts;
private DecisionMatrix collective;
private ArrayList<Structure> twoTuplePreferencesDM;
private Structure[] preferencesArray;
@Override
protected void setModelConfiguration() {
}
@Override
protected void obtainConfigurationValues() {
epsilon = (Float) configuration.getValue(EPSILON);
alpha = (Float) configuration.getValue(ALPHA);
cost = (Integer[]) configuration.getValue(COST);
weights = (Float[]) configuration.getValue(WEIGHTS);
transformValuationToTwoTuple();
}
@SuppressWarnings("unchecked")
private void transformValuationToTwoTuple() {
List<Structure> preferencesDM = new ArrayList<Structure>();
for(int i = 0; i < numberOfCriteria * numberOfExperts; i++){
preferencesDM.add(preferences[i]);
}
ArrayList<Structure> unifiedValuations = (ArrayList<Structure>) ((RunnableScript) E4DIAddon.aseService.createExecutionBuilder()
.setFunction("Unification")
.putVariable("preferences", preferencesDM)
.putVariable("blts", getBLTS(preferencesDM))
.execute())
.getResult();
twoTuplePreferencesDM = (ArrayList<Structure>) ((RunnableScript) E4DIAddon.aseService.createExecutionBuilder()
.setFunction("Disunification")
.putVariable("preferences", unifiedValuations)
.execute())
.getResult();
}
private FuzzySet getBLTS(List<Structure> preferencesDM ) {
FuzzySet result=(FuzzySet) E4DIAddon.aseService
.createFragmentBuilder()
.putVariable("preferences", preferencesDM.toArray()) //$NON-NLS-1$
.setCode("unification.getBLTS(preferences)") //$NON-NLS-1$
.setOutputType(FuzzySet.class.getName())
.eval()
.getResult();
return result;
}
@Override
protected void preFirstSaveRoundResults() {
preSaveRoundResult(1, preferencesArray, obtainVisualizeValues(), consensusDegree);
result.put(EResultElements.initial_consensus_degree, consensusDegree);
result.put(EResultElements.maxround, 1);
result.put(EResultElements.consensus_threshold, alpha);
result.put(EResultElements.consensus_model, CONSENSUS_MODEL_NAME);
}
@Override
protected void preSaveRoundResults() {
computeConsensusDegree();
preSaveRoundResult(1, preferencesArray, obtainVisualizeValues(), consensusDegree);
}
@Override
protected void posSaveRoundResults() {
posSaveRoundResult(preferencesArray, obtainVisualizeValues(), consensusDegree, null);
}
@Override
protected boolean mustBeCarriedOutAnotherRound() {
return false;
}
@Override
protected void saveExecutionResults() {
this.configuration.setValue(PREFERENCES, preferencesArray);
result.put(EResultElements.number_of_rounds_required, 1);
result.put(EResultElements.consensus_degree_achieved, consensusDegree);
}
@Override
protected void consensusRound() {
if(consensusDegree < alpha) {
List<Float> minimumCostResults = new ArrayList<Float>();
DecisionMatrix[] numericPreferences = convertPreferencesToNumber();
Float[] preferencesMinimumCost = new Float[numberOfExperts];
for(int i = 0; i < numberOfCriteria; ++i) {
for(int j = 0; j < numberOfAlternatives; ++j) {
for(int k = 0; k < numberOfExperts; ++k) {
DecisionMatrix exp = numericPreferences[k];
preferencesMinimumCost[k] = (Float) exp.getValue(i, j);
}
minimumCostResults.addAll(Arrays.asList((Float[]) ((RunnableScript) E4DIAddon.aseService.createExecutionBuilder()
.setFunction("zhang2011minimumcostLinguistic")
.putVariable("epsilon", epsilon)
.putVariable("alpha", alpha)
.putVariable("cost", cost)
.putVariable("weights", weights)
.putVariable("pref", preferencesMinimumCost)
.execute())
.getResult()));
}
}
//Decision matrix separated by criteria
List<Structure> aux = new ArrayList<>();
aux.addAll(twoTuplePreferencesDM);
twoTuplePreferencesDM.clear();
int g = blts.getLabelSet().getCardinality() - 1;
DecisionMatrix dmExpCrit = null;
for(int k = 0; k < numberOfExperts; ++k) {
for(int i = 0; i < numberOfCriteria; ++i) {
dmExpCrit = new DecisionMatrix(1, numberOfAlternatives);
for(int j = 0; j < numberOfAlternatives; ++j) {
TwoTuple twoTuple = new TwoTuple(blts);
twoTuple.calculateDelta(minimumCostResults.get((i * numberOfExperts * numberOfAlternatives) + (j * numberOfExperts) + k) * g);
dmExpCrit.setValue(0, j, twoTuple);
}
twoTuplePreferencesDM.add(dmExpCrit);
}
}
}
}
private DecisionMatrix[] convertPreferencesToNumber() {
DecisionMatrix[] result = new DecisionMatrix[preferences.length - 1];
DecisionMatrix dmExpert, dmByCriterion;
TwoTuple preference;
int g = blts.getLabelSet().getCardinality() - 1;
for(int k = 0; k < numberOfExperts; ++k) {
dmExpert = new DecisionMatrix(numberOfCriteria, numberOfAlternatives);
for(int i = 0; i < numberOfCriteria; ++i) {
dmByCriterion = (DecisionMatrix) twoTuplePreferencesDM.get(k * numberOfCriteria + i);
for(int col = 0; col < numberOfAlternatives; ++col) {
preference = (TwoTuple) dmByCriterion.getValue(0, col);
dmExpert.setValue(i, col, 1f - ((g - Math.round(preference.calculateInverseDelta())) / (float) g));
dmExpert.setDomain(i, col, dmByCriterion.getDomain(0, col));
}
}
result[k] = dmExpert;
}
return result;
}
private void computeCollective() {
Structure[] preferecesAux = new Structure[preferences.length - 1];
List<Structure> preferencesDM = new ArrayList<Structure>();
for (int i = 0; i < preferecesAux.length; i++) {
try {
preferecesAux[i] = (Structure) preferences[i].clone();
preferencesDM.add((Structure) preferences[i].clone());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
blts = getBLTS(preferencesDM);
Object[][] collectiveASE = (Object[][]) ((RunnableScript)
E4DIAddon.aseService.createExecutionBuilder()
.setFunction("arithmeticAggregationLPR")
.putVariable("preferences", preferecesAux)
.putVariable("alternatives", numberOfAlternatives)
.putVariable("criteria", numberOfCriteria)
.putVariable("experts", numberOfExperts)
.execute())
.getResult();
if ((collectiveASE != null)) {
DecisionMatrix result = new DecisionMatrix(numberOfCriteria,numberOfAlternatives);
for (int i = 0; i < numberOfCriteria; i++) {
for (int j = 0; j < numberOfAlternatives; j++) {
result.setDomain(i,j,blts);
}
}
result.prepareStructureForPreferences(collectiveASE);
collective=result;
}
}
private void computeConsensusDegree() {
consensusDegree = ConsensusEngine.twoTupleConsensusBasedOnDistanceIndividualCollectiveWeightedAverage(
Arrays.copyOf(preferencesArray, preferencesArray.length - 1), weights);
}
@Override
protected void groupPreferencesByCriteria() {
computeCollective();
preferencesArray = new Structure[numberOfExperts+1];
DecisionMatrix dmExpert, dmByCriterion;
for (int k = 0; k < numberOfExperts; ++k) {
dmExpert = new DecisionMatrix(numberOfCriteria, numberOfAlternatives);
for (int i = 0; i < numberOfCriteria; ++i) {
dmByCriterion = (DecisionMatrix) twoTuplePreferencesDM.get(k * numberOfCriteria + i);
for (int col = 0; col < numberOfAlternatives; ++col) {
dmExpert.setValue(i, col, dmByCriterion.getValue(0, col));
dmExpert.setDomain(i, col, dmByCriterion.getDomain(0, col));
}
}
preferencesArray[k]=dmExpert;
}
preferencesArray[numberOfExperts]=collective;
computeConsensusDegree();
}
@Override
protected Float[][][] obtainVisualizeValues() {
Float[][][] preferencesGroupVisualization=new Float[preferencesArray.length][numberOfCriteria][numberOfAlternatives];
for (int k = 0; k < preferencesArray.length; k++) {
preferencesGroupVisualization[k]= preferencesArray[k].obtainVisualizeValues();
}
return preferencesGroupVisualization;
}
}
@@ -0,0 +1,9 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: afryca.consensusmodel.transrisk2018;singleton:=true
Bundle-Version: 1.0.0.202101221157
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: afryca.consensusmodel
Automatic-Module-Name: afryca.consensusmodel.transrisk2018
@@ -0,0 +1,4 @@
#Fri Jan 22 13:01:44 CET 2021
artifact.main=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.transrisk2018\\target\\afryca.consensusmodel.transrisk2018-1.0.0-SNAPSHOT.jar
artifact.attached.p2artifacts=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.transrisk2018\\target\\p2artifacts.xml
artifact.attached.p2metadata=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.transrisk2018\\target\\p2content.xml
@@ -0,0 +1,3 @@
artifactId=afryca.consensusmodel.transrisk2018
groupId=afryca.group
version=1.0.0-SNAPSHOT
@@ -0,0 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<?artifactRepository version='1.1.0'?>
<artifacts size='1'>
<artifact classifier='osgi.bundle' id='afryca.consensusmodel.transrisk2018' version='1.0.0.202101221157'>
<properties size='5'>
<property name='artifact.size' value='8975'/>
<property name='download.size' value='8975'/>
<property name='maven-groupId' value='afryca.group'/>
<property name='maven-artifactId' value='afryca.consensusmodel.transrisk2018'/>
<property name='maven-version' value='1.0.0-SNAPSHOT'/>
</properties>
</artifact>
</artifacts>
@@ -0,0 +1,45 @@
<?xml version='1.0' encoding='UTF-8'?>
<units size='1'>
<unit id='afryca.consensusmodel.transrisk2018' version='1.0.0.202101221157' generation='2'>
<update id='afryca.consensusmodel.transrisk2018' range='[0.0.0,1.0.0.202101221157)' severity='0'/>
<properties size='6'>
<property name='es.Bundle-Name' value='TRANSrisk2018'/>
<property name='df_LT.Bundle-Name' value='TRANSrisk2018'/>
<property name='org.eclipse.equinox.p2.name' value='%Bundle-Name'/>
<property name='maven-groupId' value='afryca.group'/>
<property name='maven-artifactId' value='afryca.consensusmodel.transrisk2018'/>
<property name='maven-version' value='1.0.0-SNAPSHOT'/>
</properties>
<provides size='6'>
<provided namespace='org.eclipse.equinox.p2.iu' name='afryca.consensusmodel.transrisk2018' version='1.0.0.202101221157'/>
<provided namespace='osgi.bundle' name='afryca.consensusmodel.transrisk2018' version='1.0.0.202101221157'/>
<provided namespace='osgi.identity' name='afryca.consensusmodel.transrisk2018' version='1.0.0.202101221157'>
<properties size='1'>
<property name='type' value='osgi.bundle'/>
</properties>
</provided>
<provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
<provided namespace='org.eclipse.equinox.p2.localization' name='es' version='1.0.0'/>
<provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
</provides>
<requires size='2'>
<required namespace='osgi.bundle' name='afryca.consensusmodel' range='0.0.0'/>
<requiredProperties namespace='osgi.ee' match='(&amp;(osgi.ee=JavaSE)(version=1.8))'>
<description>
afryca.consensusmodel.transrisk2018
</description>
</requiredProperties>
</requires>
<artifacts size='1'>
<artifact classifier='osgi.bundle' id='afryca.consensusmodel.transrisk2018' version='1.0.0.202101221157'/>
</artifacts>
<touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
<touchpointData size='1'>
<instructions size='1'>
<instruction key='manifest'>
Bundle-SymbolicName: afryca.consensusmodel.transrisk2018;singleton:=true&#xA;Bundle-Version: 1.0.0.202101221157&#xA;
</instruction>
</instructions>
</touchpointData>
</unit>
</units>