afryca.ase.Snippet Library unification Unify different kinds of information var unification = (typeof exports === "undefined")?(function unification() {}):(exports); if(typeof global !== "undefined") { global.unification = unification; } unification.unify = function unify(preferences, blts) { var structure; var structurePreferences; var unifiedPreferences=[]; var unifiedPreferences = new ArrayList(preferences.length); var unifiedPreference; for (var p = 0; p < preferences.length; p++) { structure = preferences[p]; structurePreferences = structure.getPreferences(); unifiedPreference = structure.createDefaultStructure(structurePreferences[0].length | 0, structurePreferences.length | 0); for(var row = 0; row < structurePreferences.length; row++) { for(var col = 0; col < structurePreferences[row].length; col++) { var domain=structure.getDomain(row|0, col|0); if(typeof structurePreferences[row][col] === 'number') { unifiedPreference.getPreferences()[row][col] = unification.unifyNumericValues(structurePreferences[row][col], blts, domain); } else if(structurePreferences[row][col] instanceof HesitantLinguisticValuation) { unifiedPreference.getPreferences()[row][col] = unification.unifyHesitantLinguisticValuation(structurePreferences[row][col], blts,domain); } else if(structurePreferences[row][col] instanceof Label){ unifiedPreference.getPreferences()[row][col] = unification.unifyLinguisticValues(structurePreferences[row][col],blts,domain); }else { unifiedPreference.getPreferences()[row][col] = structurePreferences[row][col]; } } } unifiedPreferences.add(unifiedPreference); } return unifiedPreferences; } unification.unifyNumericValues = function unifyNumericValues(value, blts, domain) { var result; if(typeof blts === 'undefined' || blts === null) { return result; } else { if (!blts.isBLTS()) { return result; } } var cardinality; var normalized; var membershipFunction; result = blts.clone(); cardinality = blts.getLabelSet().getCardinality(); normalized = unification.normalize(value, domain); for(var i = 0; i < cardinality; i++) { membershipFunction = result.getLabelSet().getLabel(i).getSemantic(); result.setValue(i | 0, membershipFunction.getMembershipValue(normalized)); } return result; } unification.normalize = function normalize(value, domain) { var min; var max; var intervalSize; min = Math.round(domain.getMin()); max = Math.round(domain.getMax()); intervalSize = max - min; return (value - min) / intervalSize; } unification.unifyHesitantLinguisticValuation = function(hlv, blts,domainValuation){ return ConsensusEngine.unificationTrapezoidalFunction(ConsensusEngine.calculateFuzzyEnvelope(blts, hlv), blts, domainValuation); } unification.unifyLinguisticValues = function unifyLinguisticValues(valuation, blts,domainValuation) { var label; if(valuation instanceof HesitantLinguisticValuation){ label = valuation.getLabel(); }else if(valuation instanceof Label){ label = valuation; } var result; if(typeof blts === 'undefined' || blts === null) { return result; } else { if (!blts.isBLTS()) { return result; } } var cardinality; var membershipFunction; result = blts.clone(); cardinality = blts.getLabelSet().getCardinality(); for(var i = 0; i < cardinality; i++) { membershipFunction = result.getLabelSet().getLabel(i).getSemantic(); result.setValue(i | 0, membershipFunction.maxMin(label.getSemantic(),blts,domainValuation)); } return result; } unification.initMatrix = function initMatrix(alternatives) { var matrix = new Array(alternatives); //init the grid matrix for (var i = 0; i < alternatives; i++) { matrix[i] = new Array(alternatives); } return matrix; } unification.getBLTS = function getBLTS(preferences) { var domains = []; for(var k=0;k cardinality) && domain.isBLTS()) { cardinality = domain.getLabelSet().getCardinality(); blts = domain; } } } return blts; } unification