Ejemplo n.º 1
0
        public DecisionResultBase Solve(AlternativesBase alternatives)
        {
            double epsilon = 1e-3;// epsilon for double comparison

            _alternatives = alternatives;

            var PreferenceIndex = ComputePreferenceMatrix();

            double[,] Flows = ComputeIOFlows(PreferenceIndex, _alternatives.Alternatives.Count);

            double [] NetFlows = ComputeNetFlows(Flows, _alternatives.Alternatives.Count);

            List <int> Ranks = new List <int>();

            for (int i = 0; i < _alternatives.Alternatives.Count; ++i)
            {
                int Rank = 1;
                for (int j = 0; j < _alternatives.Alternatives.Count; ++j)
                {
                    if (i != j && NetFlows[i] - NetFlows[j] < epsilon)
                    {
                        ++Rank;
                    }
                }
                Ranks.Add(Rank);
            }

            var Result = new DecisionResultBase();

            Result.Ranks = Ranks;

            return(Result);
        }
Ejemplo n.º 2
0
        public DecisionResultBase Solve(AlternativesBase alternatives)
        {
            _alternatives = alternatives;

            //Impacts Matrix
            double[,] impact_matrix = CalculateImpactMatrix();

            //calculate range with pairwise comparison
            DecisionResultBase result = new DecisionResultBase();

            for (int i = 0; i < alternatives.Alternatives.Count; ++i)
            {
                int dominated = 0;
                for (int j = 0; j < alternatives.Alternatives.Count; ++j)
                {
                    if (i != j)
                    {
                        if (impact_matrix[i, j] - impact_matrix[j, i] >= 0)
                        {
                            dominated++;
                        }
                    }
                }
                result.Ranks.Add(alternatives.Alternatives.Count - dominated);
            }
            return(result);
        }
Ejemplo n.º 3
0
        public DecisionResultBase Solve(AlternativesBase alternatives)
        {
            _alternatives = alternatives;

            double[,] normalize = GetNormalizedMatrix();
            List <double>[,] discordanceSets = GetDiscordances(normalize);
            double[,] concordances           = GetConcordances(normalize);

            double[,] nonDiscordance    = GetNonDiscordanceIndices(discordanceSets, concordances);
            double[,] generalPreference = GetGeneralPreferences(concordances, nonDiscordance);
            int[,] rangeMatrix          = GetResultMatrix(generalPreference);
            int[,] finalRange           = GetFinalRanking(rangeMatrix);

            DecisionResultBase result = new DecisionResultBase();

            for (int i = 0; i < _alternatives.Alternatives.Count; ++i)
            {
                int rank = _alternatives.Alternatives.Count;
                for (int j = 0; j < _alternatives.Alternatives.Count; ++j)
                {
                    rank -= finalRange[i, j];
                }
                result.Ranks.Add(rank);
            }
            return(result);
        }
        public DecisionResultBase Solve(AlternativesBase alternatives)
        {
            _alternatives = alternatives;
            double[,] normalizeWeights = GetNormalizedMatrix();
            double[] bestAlternative = GetBestAlternative(normalizeWeights);
            double[] distances       = GetBlockDistances(
                normalizeWeights,
                bestAlternative
                );

            DecisionResultBase result = new DecisionResultBase();

            for (int i = 0; i < distances.Length; ++i)
            {
                int rank = distances.Length;
                for (int j = 0; j < distances.Length; ++j)
                {
                    if (i != j && distances[i] <= distances[j])
                    {
                        --rank;
                    }
                }
                result.Ranks.Add(rank);
            }
            return(result);
        }
Ejemplo n.º 5
0
        public DecisionResultBase Solve(AlternativesBase alternatives)
        {
            _alternatives = alternatives;

            double[,] normalizedDecisionMarix = GetNormalizedMatrix();

            double[] ranks = GetResultValues(
                GetAdditiveValues(normalizedDecisionMarix),
                GetMultiplicativeValues(normalizedDecisionMarix)
                );

            //calculate range with pairwise comparison
            DecisionResultBase result = new DecisionResultBase();

            for (int i = 0; i < alternatives.Alternatives.Count; ++i)
            {
                int dominated = 0;
                for (int j = 0; j < alternatives.Alternatives.Count; ++j)
                {
                    if (i != j && ranks[i] >= ranks[j])
                    {
                        ++dominated;
                    }
                }
                result.Ranks.Add(alternatives.Alternatives.Count - dominated);
            }

            return(result);
        }
Ejemplo n.º 6
0
        public List <int> GetRanksTAXONOMY()
        {
            IDecisionProvider      provider = new TAXONOMYDecisionProvider();
            IDecisionConfiguration config   = new DecisionConfigurationBase
            {
                CriteriaRanks = _criterias.GetNormalizedWeight()
            };

            provider.Init(config);

            AlternativesBase alternatives = GetAlternativesBases(MethodsEnum.TAXONOMY);

            List <int> result = provider.Solve(alternatives).Ranks;

            return(result);
        }
Ejemplo n.º 7
0
        public List <int> GetRanksWASPAS()
        {
            WASPASDecisionProvider      provider = new WASPASDecisionProvider();
            WASPASDecisionConfiguration config   = new WASPASDecisionConfiguration
            {
                CriteriaRanks = _criterias.GetNormalizedWeight(),
                Lambda        = WASPASLambda
            };

            provider.Init(config);

            AlternativesBase alternatives = GetAlternativesBases(MethodsEnum.WASPAS);

            List <int> result = provider.Solve(alternatives).Ranks;

            return(result);
        }
Ejemplo n.º 8
0
        public List <int> GetRanksPROMETHEE()
        {
            PROMETHEEDecisionProvider      provider = new PROMETHEEDecisionProvider();
            PROMETHEEDecisionConfiguration config   = new PROMETHEEDecisionConfiguration
            {
                CriteriaRanks       = _criterias.GetNormalizedWeight(),
                PreferenceFunctions = _criterias.GetPreferenceFunctions()
            };

            provider.Init(config);

            AlternativesBase alternatives = GetAlternativesBases(MethodsEnum.PROMETHEE);

            List <int> result = provider.Solve(alternatives).Ranks;

            return(result);
        }
Ejemplo n.º 9
0
        public List <int> GetRanksSMART()
        {
            SMARTDecisionProvider      provider = new SMARTDecisionProvider();
            SMARTDecisionConfiguration config   = new SMARTDecisionConfiguration
            {
                CriteriaRanks = _criterias.GetWeights(),
                Epsilon       = 1
            };

            provider.Init(config);

            AlternativesBase alternatives = GetAlternativesBases(MethodsEnum.SMART);

            List <int> result = provider.Solve(alternatives).Ranks;

            return(result);
        }
Ejemplo n.º 10
0
        public List <int> GetRanksELECTRE()
        {
            ELECTREDecisionProvider      provider = new ELECTREDecisionProvider();
            ELECTREDecisionConfiguration config   = new ELECTREDecisionConfiguration
            {
                CriteriaRanks = _criterias.GetNormalizedWeight(),
                Parameters    = _criterias.GetELECTREParameters(),
                alpha         = ELECTREAlpha,
                beta          = ELECTREBeta
            };

            provider.Init(config);

            AlternativesBase alternatives = GetAlternativesBases(MethodsEnum.REGIME);

            List <int> result    = provider.Solve(alternatives).Ranks;
            int        MinResult = result.Min();

            for (int i = 0; i < result.Count; ++i)
            {
                result[i] -= (MinResult - 1);
            }
            return(result);
        }
Ejemplo n.º 11
0
        public DecisionResultBase Solve(AlternativesBase alternatives)
        {
            _alternatives = alternatives;
            //Main constant for algorithm
            var basis     = 1.0 + _configuration.Epsilon;
            var intervals = 6;
            var factor    = Math.Pow(basis, intervals); // = 64 (default)
            var root2     = Math.Sqrt(2.0);

            double[,] g = new double[_alternatives.Criterias.Count, _alternatives.Alternatives.Count];
            int i, j;

            for (i = 0; i < _alternatives.Criterias.Count; i++) //i - criteria number
            {
                var critera          = _alternatives.Criterias[i];
                var minCriteriaValue = critera.MinValue;
                var maxCriteriaValue = critera.MaxValue;
                //posible correcting minCriteraValue
                //minCriteriaValue += (maxCriteriaValue - minCriteriaValue) / factor;
                var deltaCriteraValue = maxCriteriaValue - minCriteriaValue;

                for (j = 0; j < _alternatives.Alternatives.Count; j++) // j - alternative number
                {
                    var alternative = _alternatives.Alternatives[j];
                    if (critera is IQualitativeCriteria)
                    {
                        g[i, j] = alternative.Values[i].Value;
                    }
                    else
                    {
                        double v;
                        v       = Math.Log((alternative.Values[i].Value - minCriteriaValue) * factor / deltaCriteraValue, basis);
                        g[i, j] = critera.CriteriaDirection == CriteriaDirectionType.Maximization ? 4 + v : 10 - v;
                    }
                }
            }
            var w = new double[_alternatives.Criterias.Count];

            if (IsCriterialWeightsNormalized() == false)
            {
                double sum = 0;
                for (i = 0; i < alternatives.Criterias.Count; i++)
                {
                    w[i] = Math.Pow(root2, _configuration.CriteriaRanks[i]);
                    sum += w[i];
                }
                //Normalizing w
                for (i = 0; i < alternatives.Criterias.Count; i++)
                {
                    w[i] /= sum;
                }
            }
            else
            {
                for (i = 0; i < alternatives.Criterias.Count; i++)
                {
                    w[i] = _configuration.CriteriaRanks[i];
                }
            }

            var f = new double[alternatives.Alternatives.Count];

            //count alternative ranks
            for (j = 0; j < alternatives.Alternatives.Count; j++)
            {
                f[j] = 0;
                for (i = 0; i < alternatives.Criterias.Count; i++)
                {
                    f[j] += w[i] * g[i, j];
                }
            }
            var permutation = new int[alternatives.Alternatives.Count];
            var number      = new int[alternatives.Alternatives.Count];

            for (j = 0; j < alternatives.Alternatives.Count; j++)
            {
                number[j] = j;
            }

            for (int j1 = 0; j1 < alternatives.Alternatives.Count - 1; j1++)
            {
                var maxIndex = j1;
                for (int j2 = j1 + 1; j2 < alternatives.Alternatives.Count; j2++)
                {
                    if (f[j2] > f[maxIndex])
                    {
                        maxIndex = j2;
                    }
                }
                var temp = f[j1];
                f[j1]       = f[maxIndex];
                f[maxIndex] = temp;

                var tempNumber = number[j1];
                number[j1]              = number[maxIndex];
                number[maxIndex]        = tempNumber;
                permutation[number[j1]] = j1;
            }
            permutation[number[alternatives.Alternatives.Count - 1]] = alternatives.Alternatives.Count - 1;

            var result = new DecisionResultBase();

            for (j = 0; j < alternatives.Alternatives.Count; j++)
            {
                result.Ranks.Add(permutation[j] + 1);
            }
            return(result);
        }
Ejemplo n.º 12
0
        public void TestREGIMEDecision()
        {
            REGIMEDecisionProvider    provider      = new REGIMEDecisionProvider();
            DecisionConfigurationBase configuration = new DecisionConfigurationBase
            {
                CriteriaRanks = new List <double> {
                    0.1, 0.175, 0.25, 0.35, 0.125
                }
            };

            provider.Init(configuration);

            var alternatives = new AlternativesBase
            {
                Criterias = new List <ICriteria>
                {
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },                                                                       //cost
                    new QualitativeCriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },                                                                                   //strength
                    new QualitativeCriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },                                                                                    //national reputation
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },                                                                        // capacity
                    new QualitativeCriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },                                                                                   // work hardness
                },
                Alternatives = new List <AlternativeBase>
                {
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(3),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Medium, new QualitativeCriteriaBase()),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.VeryGood, new QualitativeCriteriaBase()),
                            new AlternativeValueBase(24000),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.FairlyWeak, new QualitativeCriteriaBase())
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(1.2),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Good, new QualitativeCriteriaBase()),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Medium, new QualitativeCriteriaBase()),
                            new AlternativeValueBase(25000),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Medium, new QualitativeCriteriaBase())
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(1.5),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.VeryGood, new QualitativeCriteriaBase()),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Poor, new QualitativeCriteriaBase()),
                            new AlternativeValueBase(32000),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Excellent, new QualitativeCriteriaBase())
                        }
                    }
                }
            };
            var result = provider.Solve(alternatives);

            Assert.IsTrue(result.Ranks.Count == 3);
            Assert.IsTrue(result.Ranks[0] == 3);
            Assert.IsTrue(result.Ranks[1] == 2);
            Assert.IsTrue(result.Ranks[2] == 1);
        }
Ejemplo n.º 13
0
        public void TestELECTREDecision()
        {
            ELECTREDecisionProvider      provider      = new ELECTREDecisionProvider();
            ELECTREDecisionConfiguration configuration = new ELECTREDecisionConfiguration
            {
                CriteriaRanks = new List <double> {
                    0.179, 0.062, 0.211, 0.017, 0.531
                },
                alpha      = 0.05,
                beta       = 0.5,
                Parameters = new List <ELECTREParameters>
                {
                    new ELECTREParameters {
                        v = 0.09, p = 0.08, q = 0.02
                    },
                    new ELECTREParameters {
                        v = 0.02, p = 0.015, q = 0.005
                    },
                    new ELECTREParameters {
                        v = 0.11, p = 0.1, q = 0.05
                    },
                    new ELECTREParameters {
                        v = 0.001, p = 0.001, q = 0
                    },
                    new ELECTREParameters {
                        v = 0.35, p = 0.33, q = 0.15
                    },
                }
            };

            provider.Init(configuration);

            var alternatives = new AlternativesBase
            {
                Criterias = new List <ICriteria>
                {
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },                                                                       //cost
                    new QualitativeCriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },                                                                                   //strength
                    new QualitativeCriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },                                                                                    //national reputation
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },                                                                        // capacity
                    new QualitativeCriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },                                                                                   // work hardness
                },
                Alternatives = new List <AlternativeBase>
                {
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(3),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Medium, new QualitativeCriteriaBase()),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.VeryGood, new QualitativeCriteriaBase()),
                            new AlternativeValueBase(24000),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.FairlyWeak, new QualitativeCriteriaBase())
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(1.2),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Good, new QualitativeCriteriaBase()),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Medium, new QualitativeCriteriaBase()),
                            new AlternativeValueBase(25000),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Good, new QualitativeCriteriaBase())
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(1.5),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Excellent, new QualitativeCriteriaBase()),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.FairlyWeak, new QualitativeCriteriaBase()),
                            new AlternativeValueBase(32000),
                            new QualitativeAlternativeValue(QualitativeCriteriaEnum.Excellent, new QualitativeCriteriaBase())
                        }
                    }
                }
            };
            var result = provider.Solve(alternatives);

            Assert.IsTrue(result.Ranks.Count == 3);
            Assert.IsTrue(result.Ranks[0] == 3);
            Assert.IsTrue(result.Ranks[1] == 2);
            Assert.IsTrue(result.Ranks[2] == 1);
        }
Ejemplo n.º 14
0
        public void TestWASPASDecision()
        {
            WASPASDecisionProvider      provider = new WASPASDecisionProvider();
            WASPASDecisionConfiguration config   = new WASPASDecisionConfiguration
            {
                Lambda        = 0.2,
                CriteriaRanks = new List <double>
                {
                    0.331, 0.181, 0.369, 0.072, 0.047
                }
            };

            provider.Init(config);

            var alternatives = new AlternativesBase
            {
                Criterias = new List <ICriteria>
                {
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },
                },
                Alternatives = new List <AlternativeBase>
                {
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(0.035),
                            new AlternativeValueBase(847),
                            new AlternativeValueBase(0.335),
                            new AlternativeValueBase(1.760),
                            new AlternativeValueBase(0.590),
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(0.027),
                            new AlternativeValueBase(834),
                            new AlternativeValueBase(0.335),
                            new AlternativeValueBase(1.680),
                            new AlternativeValueBase(0.665),
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(0.037),
                            new AlternativeValueBase(808),
                            new AlternativeValueBase(0.590),
                            new AlternativeValueBase(2.400),
                            new AlternativeValueBase(0.500),
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(0.028),
                            new AlternativeValueBase(821),
                            new AlternativeValueBase(0.500),
                            new AlternativeValueBase(1.590),
                            new AlternativeValueBase(0.410),
                        }
                    }
                }
            };

            var result = provider.Solve(alternatives);

            Assert.IsTrue(result.Ranks.Count == 4);
            Assert.IsTrue(result.Ranks[0] == 4);
            Assert.IsTrue(result.Ranks[1] == 3);
            Assert.IsTrue(result.Ranks[2] == 2);
            Assert.IsTrue(result.Ranks[3] == 1);
        }
Ejemplo n.º 15
0
        public void TestSMARTDecision()
        {
            SMARTDecisionProvider      provider      = new SMARTDecisionProvider();
            SMARTDecisionConfiguration configuration = new SMARTDecisionConfiguration
            {
                Epsilon       = 1,
                CriteriaRanks = new List <double> {
                    9, 5, 7, 6
                }
            };

            provider.Init(configuration);
            var alternatives = new AlternativesBase
            {
                Criterias = new List <ICriteria>
                {
                    new CriteriaBase {
                        MinValue = 20000, MaxValue = 40000, CriteriaDirection = CriteriaDirectionType.Minimization
                    },                                                                                                           //Consumer price
                    new CriteriaBase {
                        MinValue = 140, MaxValue = 220, CriteriaDirection = CriteriaDirectionType.Maximization
                    },                                                                                                       //Maximum speed
                    new CriteriaBase {
                        MinValue = 8, MaxValue = 20, CriteriaDirection = CriteriaDirectionType.Minimization
                    },                                                                                                    //Acceleration 0–100
                    new CriteriaBase {
                        MinValue = 200, MaxValue = 2000, CriteriaDirection = CriteriaDirectionType.Maximization
                    }                                                                                                        //Trunk volume of car
                },
                Alternatives = new List <AlternativeBase>
                {
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(25000),
                            new AlternativeValueBase(153),
                            new AlternativeValueBase(15.3),
                            new AlternativeValueBase(250)
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(33000),
                            new AlternativeValueBase(177),
                            new AlternativeValueBase(12.3),
                            new AlternativeValueBase(380)
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(40000),
                            new AlternativeValueBase(199),
                            new AlternativeValueBase(11.1),
                            new AlternativeValueBase(480)
                        }
                    }
                }
            };

            var result = provider.Solve(alternatives);

            Assert.IsTrue(result.Ranks.Count == 3);
            Assert.IsTrue(result.Ranks[0] == 3);
            Assert.IsTrue(result.Ranks[1] == 2);
            Assert.IsTrue(result.Ranks[2] == 1);
        }
Ejemplo n.º 16
0
        public void TestPROMETHEEDecision()
        {
            PROMETHEEDecisionProvider      provider = new PROMETHEEDecisionProvider();
            PROMETHEEDecisionConfiguration config   = new PROMETHEEDecisionConfiguration
            {
                CriteriaRanks = new List <double> {
                    1.0 / 6, 1.0 / 6, 1.0 / 6, 1.0 / 6, 1.0 / 6, 1.0 / 6
                },
                PreferenceFunctions = new List <PreferenceFunction>
                {
                    new PreferenceFunction(
                        PreferenceFunctionEnum.QuasiCriterion,
                        new List <double> {
                        10
                    }
                        ),
                    new PreferenceFunction(
                        PreferenceFunctionEnum.VShapeCriterion,
                        new List <double> {
                        30
                    }
                        ),
                    new PreferenceFunction(
                        PreferenceFunctionEnum.LinearCriterion,
                        new List <double> {
                        50, 450
                    }
                        ),
                    new PreferenceFunction(
                        PreferenceFunctionEnum.LevelCriterion,
                        new List <double> {
                        10, 50
                    }
                        ),
                    new PreferenceFunction(
                        PreferenceFunctionEnum.UsualCriterion,
                        new List <double>()
                        ),
                    new PreferenceFunction(
                        PreferenceFunctionEnum.GaussianCriterion,
                        new List <double> {
                        5
                    }
                        )
                }
            };

            provider.Init(config);

            var Alternatives = new AlternativesBase
            {
                Criterias = new List <ICriteria>
                {
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Minimization
                    },
                    new CriteriaBase {
                        CriteriaDirection = CriteriaDirectionType.Maximization
                    }
                },
                Alternatives = new List <AlternativeBase>
                {
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(80),
                            new AlternativeValueBase(90),
                            new AlternativeValueBase(600),
                            new AlternativeValueBase(54),
                            new AlternativeValueBase(8),
                            new AlternativeValueBase(5)
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(65),
                            new AlternativeValueBase(58),
                            new AlternativeValueBase(200),
                            new AlternativeValueBase(97),
                            new AlternativeValueBase(1),
                            new AlternativeValueBase(1)
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(83),
                            new AlternativeValueBase(60),
                            new AlternativeValueBase(400),
                            new AlternativeValueBase(72),
                            new AlternativeValueBase(4),
                            new AlternativeValueBase(7)
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(40),
                            new AlternativeValueBase(80),
                            new AlternativeValueBase(1000),
                            new AlternativeValueBase(75),
                            new AlternativeValueBase(7),
                            new AlternativeValueBase(10)
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(52),
                            new AlternativeValueBase(72),
                            new AlternativeValueBase(600),
                            new AlternativeValueBase(20),
                            new AlternativeValueBase(3),
                            new AlternativeValueBase(8)
                        }
                    },
                    new AlternativeBase
                    {
                        Values = new List <IAlternativeValue>
                        {
                            new AlternativeValueBase(94),
                            new AlternativeValueBase(96),
                            new AlternativeValueBase(700),
                            new AlternativeValueBase(36),
                            new AlternativeValueBase(5),
                            new AlternativeValueBase(6)
                        }
                    }
                }
            };
            var result = provider.Solve(Alternatives);

            Assert.IsTrue(result.Ranks.Count == 6);
            Assert.IsTrue(result.Ranks[0] == 6);
            Assert.IsTrue(result.Ranks[1] == 2);
            Assert.IsTrue(result.Ranks[2] == 5);
            Assert.IsTrue(result.Ranks[3] == 3);
            Assert.IsTrue(result.Ranks[4] == 1);
            Assert.IsTrue(result.Ranks[5] == 4);
        }
Ejemplo n.º 17
0
        public List <DataGridViewRow> GetSolutionsAsDataGrid()
        {
            REGIMEDecisionProvider    resultProvider = new REGIMEDecisionProvider();
            DecisionConfigurationBase resultBase     = new DecisionConfigurationBase
            {
                CriteriaRanks = GetResultRanks()
            };
            AlternativesBase resultAlternatives = PrepareResultAlternativesBase();

            List <DataGridViewRow> result = new List <DataGridViewRow>();

            if (_methods[MethodsEnum.SMART] == true)
            {
                DataGridViewRow         NewRow    = new DataGridViewRow();
                DataGridViewTextBoxCell TitleCell = new DataGridViewTextBoxCell();
                TitleCell.Value = "SMART";
                NewRow.Cells.Add(TitleCell);

                List <int> localRanks = GetRanksSMART();

                for (int i = 0; i < localRanks.Count; ++i)
                {
                    resultAlternatives.Alternatives[i].Values.Add(new AlternativeValueBase(localRanks[i]));
                }

                foreach (int value in localRanks)
                {
                    DataGridViewTextBoxCell newCell = new DataGridViewTextBoxCell();
                    newCell.Value = value.ToString();
                    NewRow.Cells.Add(newCell);
                }
                result.Add(NewRow);
            }
            if (_methods[MethodsEnum.REGIME] == true)
            {
                DataGridViewRow         NewRow    = new DataGridViewRow();
                DataGridViewTextBoxCell TitleCell = new DataGridViewTextBoxCell();
                TitleCell.Value = "REGIME";
                NewRow.Cells.Add(TitleCell);

                List <int> localRanks = GetRanksREGIME();

                for (int i = 0; i < localRanks.Count; ++i)
                {
                    resultAlternatives.Alternatives[i].Values.Add(new AlternativeValueBase(localRanks[i]));
                }

                foreach (int value in localRanks)
                {
                    DataGridViewTextBoxCell newCell = new DataGridViewTextBoxCell();
                    newCell.Value = value.ToString();
                    NewRow.Cells.Add(newCell);
                }
                result.Add(NewRow);
            }
            if (_methods[MethodsEnum.PROMETHEE] == true)
            {
                DataGridViewRow         NewRow    = new DataGridViewRow();
                DataGridViewTextBoxCell TitleCell = new DataGridViewTextBoxCell();
                TitleCell.Value = "PROMETHEE";
                NewRow.Cells.Add(TitleCell);

                List <int> localRanks = GetRanksPROMETHEE();

                for (int i = 0; i < localRanks.Count; ++i)
                {
                    resultAlternatives.Alternatives[i].Values.Add(new AlternativeValueBase(localRanks[i]));
                }

                foreach (int value in localRanks)
                {
                    DataGridViewTextBoxCell newCell = new DataGridViewTextBoxCell();
                    newCell.Value = value.ToString();
                    NewRow.Cells.Add(newCell);
                }
                result.Add(NewRow);
            }
            if (_methods[MethodsEnum.WASPAS] == true)
            {
                DataGridViewRow         NewRow    = new DataGridViewRow();
                DataGridViewTextBoxCell TitleCell = new DataGridViewTextBoxCell();
                TitleCell.Value = "WASPAS";
                NewRow.Cells.Add(TitleCell);

                List <int> localRanks = GetRanksWASPAS();

                for (int i = 0; i < localRanks.Count; ++i)
                {
                    resultAlternatives.Alternatives[i].Values.Add(new AlternativeValueBase(localRanks[i]));
                }

                foreach (int value in localRanks)
                {
                    DataGridViewTextBoxCell newCell = new DataGridViewTextBoxCell();
                    newCell.Value = value.ToString();
                    NewRow.Cells.Add(newCell);
                }
                result.Add(NewRow);
            }
            if (_methods[MethodsEnum.TAXONOMY] == true)
            {
                DataGridViewRow         NewRow    = new DataGridViewRow();
                DataGridViewTextBoxCell TitleCell = new DataGridViewTextBoxCell();
                TitleCell.Value = "TAXONOMY";
                NewRow.Cells.Add(TitleCell);

                List <int> localRanks = GetRanksTAXONOMY();

                for (int i = 0; i < localRanks.Count; ++i)
                {
                    resultAlternatives.Alternatives[i].Values.Add(new AlternativeValueBase(localRanks[i]));
                }

                foreach (int value in localRanks)
                {
                    DataGridViewTextBoxCell newCell = new DataGridViewTextBoxCell();
                    newCell.Value = value.ToString();
                    NewRow.Cells.Add(newCell);
                }
                result.Add(NewRow);
            }
            if (_methods[MethodsEnum.ELECTRE] == true)
            {
                DataGridViewRow         NewRow    = new DataGridViewRow();
                DataGridViewTextBoxCell TitleCell = new DataGridViewTextBoxCell();
                TitleCell.Value = "ELECTRE";
                NewRow.Cells.Add(TitleCell);

                List <int> localRanks;
                try
                {
                    localRanks = GetRanksELECTRE();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    localRanks = new List <int>();
                    for (int i = 0; i < _alternatives.Alternatives.Count; ++i)
                    {
                        localRanks.Add(1);
                    }
                }

                for (int i = 0; i < localRanks.Count; ++i)
                {
                    resultAlternatives.Alternatives[i].Values.Add(new AlternativeValueBase(localRanks[i]));
                }

                foreach (int value in localRanks)
                {
                    DataGridViewTextBoxCell newCell = new DataGridViewTextBoxCell();
                    newCell.Value = value.ToString();
                    NewRow.Cells.Add(newCell);
                }
                result.Add(NewRow);
            }

            resultProvider.Init(resultBase);
            List <int> ranks = resultProvider.Solve(resultAlternatives).Ranks;

            DataGridViewRow         NewRowResult    = new DataGridViewRow();
            DataGridViewTextBoxCell TitleCellResult = new DataGridViewTextBoxCell();

            TitleCellResult.Value = "RESULT";
            NewRowResult.Cells.Add(TitleCellResult);
            foreach (int value in ranks)
            {
                DataGridViewTextBoxCell newCell = new DataGridViewTextBoxCell();
                newCell.Value = value.ToString();
                NewRowResult.Cells.Add(newCell);
            }
            result.Add(NewRowResult);
            return(result);
        }