Esempio n. 1
0
    def test002(self):
        c = generate_criteria(3)
        cat = generate_categories(3)
        cps = generate_categories_profiles(cat)

        bp1 = AlternativePerformances('b1',
                                      {'c1': 0.75, 'c2': 0.75, 'c3': 0.75})
        bp2 = AlternativePerformances('b2',
                                      {'c1': 0.25, 'c2': 0.25, 'c3': 0.25})
        bpt = PerformanceTable([bp1, bp2])

        cv1 = CriterionValue('c1', 0.2)
        cv2 = CriterionValue('c2', 0.2)
        cv3 = CriterionValue('c3', 0.2)
        cv12 = CriterionValue(CriteriaSet(['c1', 'c2']), -0.1)
        cv23 = CriterionValue(CriteriaSet(['c2', 'c3']), 0.2)
        cv13 = CriterionValue(CriteriaSet(['c1', 'c3']), 0.3)
        cvs = CriteriaValues([cv1, cv2, cv3, cv12, cv23, cv13])

        lbda = 0.6

        model = MRSort(c, cvs, bpt, lbda, cps)

        a = generate_alternatives(10000)
        pt = generate_random_performance_table(a, model.criteria)
        aa = model.get_assignments(pt)

        model2 = MRSort(c, None, bpt, None, cps)
        lp = LpMRSortMobius(model2, pt, aa)
        obj = lp.solve()

        aa2 = model2.get_assignments(pt)

        self.assertEqual(obj, 0)
        self.assertEqual(aa, aa2)
Esempio n. 2
0
    def test001(self):
        random.seed(1)
        c = generate_criteria(4)

        cv1 = CriterionValue('c1', 0.25)
        cv2 = CriterionValue('c2', 0.25)
        cv3 = CriterionValue('c3', 0.25)
        cv4 = CriterionValue('c4', 0.25)
        cv = CriteriaValues([cv1, cv2, cv3, cv4])

        cat = generate_categories(2)
        cps = generate_categories_profiles(cat)

        bp = AlternativePerformances('b1', {'c1': 0.5, 'c2': 0.5,
                                            'c3': 0.5, 'c4': 0.5})
        bpt = PerformanceTable([bp])
        lbda = 0.5

        etri = MRSort(c, cv, bpt, 0.5, cps)

        a = generate_alternatives(1000)
        pt = generate_random_performance_table(a, c)
        aas = etri.pessimist(pt)

        for aa in aas:
            w = 0
            perfs = pt[aa.id].performances
            for c, val in perfs.items():
                if val >= bp.performances[c]:
                    w += cv[c].value

            if aa.category_id == 'cat2':
                self.assertLess(w, lbda)
            else:
                self.assertGreaterEqual(w, lbda)
Esempio n. 3
0
    def test003(self):
        random.seed(2)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c)
        mobius = capacities_to_mobius(c, capacities)

        self.assertAlmostEqual(mobius.sum(), 1)
    def test003(self):
        random.seed(2)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c)
        mobius = capacities_to_mobius(c, capacities)

        self.assertAlmostEqual(mobius.sum(), 1)
    def test005(self):
        random.seed(4)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c, 2)
        mobius = capacities_to_mobius(c, capacities)

        self.assertAlmostEqual(mobius.sum(), 1)
        self.assertTrue(capacities_are_monotone(c, capacities))
        self.assertAlmostEqual(capacities.max(), 1)
Esempio n. 6
0
    def test005(self):
        random.seed(4)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c, 2)
        mobius = capacities_to_mobius(c, capacities)

        self.assertAlmostEqual(mobius.sum(), 1)
        self.assertTrue(capacities_are_monotone(c, capacities))
        self.assertAlmostEqual(capacities.max(), 1)
    def test001(self):
        random.seed(4)
        c = generate_criteria(3)
        capacities = generate_random_capacities(c)
        mobius = capacities_to_mobius(c, capacities)
        capacities2 = mobius_to_capacities(c, mobius)

        mobius_truncate(mobius, 2)

        self.assertEqual(capacities, capacities2)
Esempio n. 8
0
    def test001(self):
        random.seed(4)
        c = generate_criteria(3)
        capacities = generate_random_capacities(c)
        mobius = capacities_to_mobius(c, capacities)
        capacities2 = mobius_to_capacities(c, mobius)

        mobius_truncate(mobius, 2)

        self.assertEqual(capacities, capacities2)
Esempio n. 9
0
    def test003_auc_no_errors(self):
        random.seed(3)
        crits = generate_criteria(5)
        model = generate_random_mrsort_model(len(crits), 3)

        alts = generate_alternatives(1000)
        pt = generate_random_performance_table(alts, crits)
        aa = model.get_assignments(pt)

        auc = model.auc(aa, pt)
        self.assertEqual(auc, 1)
    def test003_auc_no_errors(self):
        random.seed(3)
        crits = generate_criteria(5)
        model = generate_random_mrsort_model(len(crits), 3)

        alts = generate_alternatives(1000)
        pt = generate_random_performance_table(alts, crits)
        aa = model.get_assignments(pt)

        auc = model.auc(aa, pt)
        self.assertEqual(auc, 1)
    def test004(self):
        random.seed(3)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c)
        mobius = capacities_to_mobius(c, capacities)
        mobius_truncate(mobius, 2)
        mobius.normalize_sum_to_unity()
        capacities2 = mobius_to_capacities(c, mobius)

        self.assertAlmostEqual(mobius.sum(), 1)
        self.assertTrue(capacities_are_monotone(c, capacities2))
        self.assertAlmostEqual(capacities2.max(), 1)
Esempio n. 12
0
    def test002_auck_all_errors(self):
        random.seed(2)
        crits = generate_criteria(5)
        model = generate_random_mrsort_model(len(crits), 2)

        alts = generate_alternatives(1000)
        pt = generate_random_performance_table(alts, crits)
        aa = model.get_assignments(pt)
        aa_err = add_errors_in_assignments(aa, model.categories, 1)

        auck = model.auck(aa_err, pt, 1)
        self.assertEqual(auck, 0)
    def test002_auck_all_errors(self):
        random.seed(2)
        crits = generate_criteria(5)
        model = generate_random_mrsort_model(len(crits), 2)

        alts = generate_alternatives(1000)
        pt = generate_random_performance_table(alts, crits)
        aa = model.get_assignments(pt)
        aa_err = add_errors_in_assignments(aa, model.categories, 1)

        auck = model.auck(aa_err, pt, 1)
        self.assertEqual(auck, 0)
Esempio n. 14
0
    def test004(self):
        random.seed(3)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c)
        mobius = capacities_to_mobius(c, capacities)
        mobius_truncate(mobius, 2)
        mobius.normalize_sum_to_unity()
        capacities2 = mobius_to_capacities(c, mobius)

        self.assertAlmostEqual(mobius.sum(), 1)
        self.assertTrue(capacities_are_monotone(c, capacities2))
        self.assertAlmostEqual(capacities2.max(), 1)
    def test002(self):
        random.seed(2)
        c = generate_criteria(4)

        cv1 = CriterionValue('c1', 0.25)
        cv2 = CriterionValue('c2', 0.25)
        cv3 = CriterionValue('c3', 0.25)
        cv4 = CriterionValue('c4', 0.25)
        cv = CriteriaValues([cv1, cv2, cv3, cv4])

        cat = generate_categories(3)
        cps = generate_categories_profiles(cat)

        bp1 = AlternativePerformances('b1', {
            'c1': 0.75,
            'c2': 0.75,
            'c3': 0.75,
            'c4': 0.75
        })
        bp2 = AlternativePerformances('b2', {
            'c1': 0.25,
            'c2': 0.25,
            'c3': 0.25,
            'c4': 0.25
        })
        bpt = PerformanceTable([bp1, bp2])
        lbda = 0.5

        etri = MRSort(c, cv, bpt, 0.5, cps)

        a = generate_alternatives(1000)
        pt = generate_random_performance_table(a, c)
        aas = etri.pessimist(pt)

        for aa in aas:
            w1 = w2 = 0
            perfs = pt[aa.id].performances
            for c, val in perfs.items():
                if val >= bp1.performances[c]:
                    w1 += cv[c].value
                if val >= bp2.performances[c]:
                    w2 += cv[c].value

            if aa.category_id == 'cat3':
                self.assertLess(w1, lbda)
                self.assertLess(w2, lbda)
            elif aa.category_id == 'cat2':
                self.assertLess(w1, lbda)
                self.assertGreaterEqual(w2, lbda)
            else:
                self.assertGreaterEqual(w1, lbda)
                self.assertGreaterEqual(w2, lbda)
Esempio n. 16
0
    def test003(self):
        random.seed(0)
        crits = generate_criteria(5)
        model = generate_random_mrsort_model(len(crits), 2)

        alts = generate_alternatives(1000)
        pt = generate_random_performance_table(alts, crits)
        aa = model.get_assignments(pt)

        aa = model.get_assignments(pt)

        self.assertEqual(len(aa.get_alternatives_in_categories(['cat1'])), 65)
        self.assertEqual(len(aa.get_alternatives_in_categories(['cat2'])), 935)
    def test003(self):
        random.seed(0)
        crits = generate_criteria(5)
        model = generate_random_mrsort_model(len(crits), 2)

        alts = generate_alternatives(1000)
        pt = generate_random_performance_table(alts, crits)
        aa = model.get_assignments(pt)

        aa = model.get_assignments(pt)

        self.assertEqual(len(aa.get_alternatives_in_categories(['cat1'])), 65)
        self.assertEqual(len(aa.get_alternatives_in_categories(['cat2'])), 935)
    def test001(self):
        c = generate_criteria(3)
        cat = generate_categories(3)
        cps = generate_categories_profiles(cat)

        bp1 = AlternativePerformances('b1', {
            'c1': 0.75,
            'c2': 0.75,
            'c3': 0.75
        })
        bp2 = AlternativePerformances('b2', {
            'c1': 0.25,
            'c2': 0.25,
            'c3': 0.25
        })
        bpt = PerformanceTable([bp1, bp2])

        cv1 = CriterionValue('c1', 0.2)
        cv2 = CriterionValue('c2', 0.2)
        cv3 = CriterionValue('c3', 0.2)
        cv12 = CriterionValue(CriteriaSet(['c1', 'c2']), -0.1)
        cv23 = CriterionValue(CriteriaSet(['c2', 'c3']), 0.2)
        cv13 = CriterionValue(CriteriaSet(['c1', 'c3']), 0.3)
        cvs = CriteriaValues([cv1, cv2, cv3, cv12, cv23, cv13])

        lbda = 0.6

        model = MRSort(c, cvs, bpt, lbda, cps)

        ap1 = AlternativePerformances('a1', {'c1': 0.3, 'c2': 0.3, 'c3': 0.3})
        ap2 = AlternativePerformances('a2', {'c1': 0.8, 'c2': 0.8, 'c3': 0.8})
        ap3 = AlternativePerformances('a3', {'c1': 0.3, 'c2': 0.3, 'c3': 0.1})
        ap4 = AlternativePerformances('a4', {'c1': 0.3, 'c2': 0.1, 'c3': 0.3})
        ap5 = AlternativePerformances('a5', {'c1': 0.1, 'c2': 0.3, 'c3': 0.3})
        ap6 = AlternativePerformances('a6', {'c1': 0.8, 'c2': 0.8, 'c3': 0.1})
        ap7 = AlternativePerformances('a7', {'c1': 0.8, 'c2': 0.1, 'c3': 0.8})
        ap8 = AlternativePerformances('a8', {'c1': 0.1, 'c2': 0.8, 'c3': 0.8})
        pt = PerformanceTable([ap1, ap2, ap3, ap4, ap5, ap6, ap7, ap8])

        aa = model.get_assignments(pt)

        self.assertEqual(aa['a1'].category_id, "cat2")
        self.assertEqual(aa['a2'].category_id, "cat1")
        self.assertEqual(aa['a3'].category_id, "cat3")
        self.assertEqual(aa['a4'].category_id, "cat2")
        self.assertEqual(aa['a5'].category_id, "cat2")
        self.assertEqual(aa['a6'].category_id, "cat3")
        self.assertEqual(aa['a7'].category_id, "cat1")
        self.assertEqual(aa['a8'].category_id, "cat1")
Esempio n. 19
0
    def test001(self):
        c = generate_criteria(3)
        cat = generate_categories(3)
        cps = generate_categories_profiles(cat)

        bp1 = AlternativePerformances('b1', {'c1': 0.75, 'c2': 0.75, 'c3': 0.75})
        bp2 = AlternativePerformances('b2', {'c1': 0.25, 'c2': 0.25, 'c3': 0.25})
        bpt = PerformanceTable([bp1, bp2])

        cv1 = CriterionValue('c1', 0.2)
        cv2 = CriterionValue('c2', 0.2)
        cv3 = CriterionValue('c3', 0.2)
        cv12 = CriterionValue(CriteriaSet(['c1', 'c2']), -0.1)
        cv23 = CriterionValue(CriteriaSet(['c2', 'c3']), 0.2)
        cv13 = CriterionValue(CriteriaSet(['c1', 'c3']), 0.3)
        cvs = CriteriaValues([cv1, cv2, cv3, cv12, cv23, cv13])

        lbda = 0.6

        model = MRSort(c, cvs, bpt, lbda, cps)

        ap1 = AlternativePerformances('a1',
                                      {'c1': 0.3, 'c2': 0.3, 'c3': 0.3})
        ap2 = AlternativePerformances('a2',
                                      {'c1': 0.8, 'c2': 0.8, 'c3': 0.8})
        ap3 = AlternativePerformances('a3',
                                      {'c1': 0.3, 'c2': 0.3, 'c3': 0.1})
        ap4 = AlternativePerformances('a4',
                                      {'c1': 0.3, 'c2': 0.1, 'c3': 0.3})
        ap5 = AlternativePerformances('a5',
                                      {'c1': 0.1, 'c2': 0.3, 'c3': 0.3})
        ap6 = AlternativePerformances('a6',
                                      {'c1': 0.8, 'c2': 0.8, 'c3': 0.1})
        ap7 = AlternativePerformances('a7',
                                      {'c1': 0.8, 'c2': 0.1, 'c3': 0.8})
        ap8 = AlternativePerformances('a8',
                                      {'c1': 0.1, 'c2': 0.8, 'c3': 0.8})
        pt = PerformanceTable([ap1, ap2, ap3, ap4, ap5, ap6, ap7, ap8])

        aa = model.get_assignments(pt)

        self.assertEqual(aa['a1'].category_id, "cat2")
        self.assertEqual(aa['a2'].category_id, "cat1")
        self.assertEqual(aa['a3'].category_id, "cat3")
        self.assertEqual(aa['a4'].category_id, "cat2")
        self.assertEqual(aa['a5'].category_id, "cat2")
        self.assertEqual(aa['a6'].category_id, "cat3")
        self.assertEqual(aa['a7'].category_id, "cat1")
        self.assertEqual(aa['a8'].category_id, "cat1")
    def on_button_generate(self):
        seed = self.spinbox_seed.value()
        random.seed(seed)

        # FIXME
        ncrit = self.spinbox_criteria.value()
        crit = generate_criteria(ncrit)
        self.worst = AlternativePerformances("worst", {c.id: 0 for c in crit})
        self.best = AlternativePerformances("best", {c.id: 1 for c in crit})

        if self.combobox_type_ori.currentIndex() == COMBO_AVFSORT:
            self.generate_avf_sort_model()
        else:
            self.generate_mr_sort_model()

        self.generate_assignments()
def run_test(m, n, lbda_min, lbda_max, filename):
    # Create the CSV writer
    f = open(filename, 'wb')
    writer = csv.writer(f)

    # Create a test_results instance
    results = test_results()
    initialized = False

    # Run the algorithm
    c = generate_criteria(n)
    coalitions = [ i for i in powerset(c.keys()) ]
    for i in range(m):
        t = one_loop(c, lbda_min, coalitions)
        t.test_name = "%d-%d" % (i, n)
        t['i'] = i
        t['nc'] = n
        t['lbda_min'] = lbda_min
        t['lbda_max'] = lbda_max
        t['n'] = m

        if initialized is False:
            fields = ['i', 'nc', 'lbda_min', 'lbda_max'] \
                      + [pprint_coalition(j) for j in coalitions] \
                      + ["%d_criteria" % i for i in range(len(c) + 1)] \
                      + ["ncoalitions"]
            writer.writerow(fields)
            initialized = True

        results.append(t)
        t.tocsv(writer, fields)
        f.flush()

        print("%s" % t)

    # Perform a summary
    writer.writerow(['', ''])
    t = results.summary(['nc', 'lbda_min', 'lbda_max', 'n'], [pprint_coalition(j)
                         for j in coalitions], [], [])
    t.tocsv(writer)

    writer.writerow(['', ''])
    t = results.summary(['nc', 'lbda_min', 'lbda_max', 'n'],
                        ["%d_criteria" % i for i in range(len(c) + 1)] \
                        + ['ncoalitions'], ['ncoalitions'],
                        ['ncoalitions'])
    t.tocsv(writer)
Esempio n. 22
0
    def generate_model(self):
        ncrit = self.spinbox_criteria.value()
        ncat = self.spinbox_categories.value()

        # FIXME
        crit = generate_criteria(ncrit)
        self.worst = AlternativePerformances("worst", {c.id: 0 for c in crit})
        self.best = AlternativePerformances("best", {c.id: 10 for c in crit})

        self.model = generate_random_mrsort_model(ncrit,
                                                  ncat,
                                                  worst=self.worst,
                                                  best=self.best)

        self.graph_model = QGraphicsSceneEtri(self.model, self.worst,
                                              self.best,
                                              self.graphicv_original.size())
        self.graphicv_original.setScene(self.graph_model)
Esempio n. 23
0
    def generate_model(self):
        ncrit = self.spinbox_criteria.value()
        ncat = self.spinbox_categories.value()

        # FIXME
        crit = generate_criteria(ncrit)
        self.worst = AlternativePerformances("worst",
                                    {c.id: 0 for c in crit})
        self.best = AlternativePerformances("best",
                                    {c.id: 10 for c in crit})

        self.model = generate_random_mrsort_model(ncrit, ncat,
                                                  worst = self.worst,
                                                  best = self.best)

        self.graph_model = QGraphicsSceneEtri(self.model,
                                              self.worst, self.best,
                                              self.graphicv_original.size())
        self.graphicv_original.setScene(self.graph_model)
    def test002(self):
        c = generate_criteria(3)
        cat = generate_categories(3)
        cps = generate_categories_profiles(cat)

        bp1 = AlternativePerformances('b1', {
            'c1': 0.75,
            'c2': 0.75,
            'c3': 0.75
        })
        bp2 = AlternativePerformances('b2', {
            'c1': 0.25,
            'c2': 0.25,
            'c3': 0.25
        })
        bpt = PerformanceTable([bp1, bp2])

        cv1 = CriterionValue('c1', 0.2)
        cv2 = CriterionValue('c2', 0.2)
        cv3 = CriterionValue('c3', 0.2)
        cv12 = CriterionValue(CriteriaSet(['c1', 'c2']), -0.1)
        cv23 = CriterionValue(CriteriaSet(['c2', 'c3']), 0.2)
        cv13 = CriterionValue(CriteriaSet(['c1', 'c3']), 0.3)
        cvs = CriteriaValues([cv1, cv2, cv3, cv12, cv23, cv13])

        lbda = 0.6

        model = MRSort(c, cvs, bpt, lbda, cps)

        a = generate_alternatives(10000)
        pt = generate_random_performance_table(a, model.criteria)
        aa = model.get_assignments(pt)

        model2 = MRSort(c, None, bpt, None, cps)
        lp = LpMRSortMobius(model2, pt, aa)
        obj = lp.solve()

        aa2 = model2.get_assignments(pt)

        self.assertEqual(obj, 0)
        self.assertEqual(aa, aa2)
Esempio n. 25
0
    def test002(self):
        random.seed(1)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c)

        self.assertTrue(capacities_are_monotone(c, capacities))
Esempio n. 26
0

if __name__ == "__main__":
    import random
    from pymcda.generate import generate_criteria
    from pymcda.generate import generate_random_criteria_weights
    from pymcda.generate import generate_categories
    from pymcda.generate import generate_categories_profiles
    from pymcda.generate import generate_alternatives
    from pymcda.generate import generate_random_performance_table
    from pymcda.generate import generate_random_profiles
    from pymcda.generate import generate_random_plinear_preference_function

    random.seed(123)

    criteria = generate_criteria(5)
    crit_weights = generate_random_criteria_weights(criteria)
    categories = generate_categories(5)
    cat_profiles = generate_categories_profiles(categories)

    a = generate_alternatives(100)
    pt = generate_random_performance_table(a, criteria)
    ap_best = pt.get_best(criteria)
    ap_worst = pt.get_worst(criteria)

    b = cat_profiles.get_ordered_profiles()
    bpt = generate_random_profiles(b, criteria)
    pf = generate_random_plinear_preference_function(criteria, ap_worst,
                                                     ap_best)
    print(crit_weights)
    print(categories)
Esempio n. 27
0
    from pymcda.types import CategoryValue, CategoriesValues
    from pymcda.types import Interval
    from pymcda.uta import AVFSort
    from pymcda.utils import compute_ca
    from pymcda.generate import generate_alternatives
    from pymcda.generate import generate_categories
    from pymcda.generate import generate_criteria
    from pymcda.generate import generate_random_criteria_values
    from pymcda.generate import generate_random_performance_table
    from pymcda.generate import generate_random_criteria_functions
    from pymcda.generate import generate_random_categories_values
    from pymcda.utils import add_errors_in_assignments
    from pymcda.utils import print_pt_and_assignments

    # Generate an avfsort model
    c = generate_criteria(7, random_direction = True)
    cv = generate_random_criteria_values(c, seed = 1)
    cv.normalize_sum_to_unity()
    cat = generate_categories(3)

    cfs = generate_random_criteria_functions(c, nseg_min = 3, nseg_max = 3)
    catv = generate_random_categories_values(cat)

    u = AVFSort(c, cv, cfs, catv)

    # Generate random alternative and compute assignments
    a = generate_alternatives(1000)
    pt = generate_random_performance_table(a, c)
    aa = u.get_assignments(pt)
    aa_err = aa.copy()
    aa_erroned = add_errors_in_assignments(aa_err, cat.keys(), 0.0)
Esempio n. 28
0
        return self.solve_function()

if __name__ == "__main__":
    import random
    from pymcda.generate import generate_criteria
    from pymcda.generate import generate_categories
    from pymcda.generate import generate_categories_profiles
    from pymcda.generate import generate_alternatives
    from pymcda.generate import generate_random_performance_table
    from pymcda.types import AlternativePerformances, PerformanceTable
    from pymcda.types import CriterionValue, CriteriaValues, CriteriaSet
    from pymcda.electre_tri import MRSort

    random.seed(0)

    c = generate_criteria(5)
    cat = generate_categories(3)
    cps = generate_categories_profiles(cat)

    bp1 = AlternativePerformances('b1', {'c1': 0.75, 'c2': 0.75, 'c3': 0.75,
                                  'c4': 0.75, 'c5': 0.75})
    bp2 = AlternativePerformances('b2', {'c1': 0.25, 'c2': 0.25, 'c3': 0.25,
                                  'c4': 0.25, 'c5': 0.25})
    bpt = PerformanceTable([bp1, bp2])

    cv1 = CriterionValue('c1', 0.2)
    cv2 = CriterionValue('c2', 0.2)
    cv3 = CriterionValue('c3', 0.2)
    cv4 = CriterionValue('c4', 0.2)
    cv5 = CriterionValue('c5', 0.2)
    cv12 = CriterionValue(CriteriaSet(['c1', 'c2']), -0.1)
Esempio n. 29
0
    from pymcda.types import CategoryValue, CategoriesValues
    from pymcda.types import Interval
    from pymcda.uta import AVFSort
    from pymcda.utils import compute_ca
    from pymcda.generate import generate_alternatives
    from pymcda.generate import generate_categories
    from pymcda.generate import generate_criteria
    from pymcda.generate import generate_random_criteria_values
    from pymcda.generate import generate_random_performance_table
    from pymcda.generate import generate_random_criteria_functions
    from pymcda.generate import generate_random_categories_values
    from pymcda.utils import add_errors_in_assignments
    from pymcda.utils import print_pt_and_assignments

    # Generate an avfsort model
    c = generate_criteria(7, random_direction = True)
    cv = generate_random_criteria_values(c, seed = 1)
    cv.normalize_sum_to_unity()
    cat = generate_categories(3)

    cfs = generate_random_criteria_functions(c, nseg_min = 3, nseg_max = 3)
    catv = generate_random_categories_values(cat)

    u = AVFSort(c, cv, cfs, catv)

    # Generate random alternative and compute assignments
    a = generate_alternatives(1000)
    pt = generate_random_performance_table(a, c)
    aa = u.get_assignments(pt)
    aa_err = aa.copy()
    aa_erroned = add_errors_in_assignments(aa_err, cat.keys(), 0.0)
if __name__ == "__main__":
    from pymcda.electre_tri import MRSort
    from pymcda.generate import generate_alternatives
    from pymcda.generate import generate_categories
    from pymcda.generate import generate_categories_profiles
    from pymcda.generate import generate_random_performance_table
    from pymcda.generate import generate_criteria
    from pymcda.types import AlternativeAssignment
    from pymcda.types import AlternativesAssignments
    from pymcda.utils import print_pt_and_assignments
    from pymcda.ui.graphic import display_electre_tri_models

    cat = generate_categories(2)
    cps = generate_categories_profiles(cat)
    c = generate_criteria(4)

    # Generate assignment incompatible with an MR-Sort model
    ap1 = AlternativePerformances('a1', {'c1': 1, 'c2': 1, 'c3': 0, 'c4': 0})
    ap2 = AlternativePerformances('a2', {'c1': 0, 'c2': 0, 'c3': 1, 'c4': 1})
    ap3 = AlternativePerformances('a3', {'c1': 1, 'c2': 0, 'c3': 1, 'c4': 0})
    ap4 = AlternativePerformances('a4', {'c1': 1, 'c2': 0, 'c3': 0, 'c4': 1})
    ap5 = AlternativePerformances('a5', {'c1': 0, 'c2': 1, 'c3': 1, 'c4': 0})
    ap6 = AlternativePerformances('a6', {'c1': 0, 'c2': 1, 'c3': 0, 'c4': 1})
    pt = PerformanceTable([ap1, ap2, ap3, ap4, ap5, ap6])

    aa1 = AlternativeAssignment('a1', 'cat1')
    aa2 = AlternativeAssignment('a2', 'cat1')
    aa3 = AlternativeAssignment('a3', 'cat2')
    aa4 = AlternativeAssignment('a4', 'cat2')
    aa5 = AlternativeAssignment('a5', 'cat2')
    from pymcda.generate import generate_categories
    from pymcda.generate import generate_categories_profiles
    from pymcda.utils import print_pt_and_assignments
    from pymcda.utils import compute_number_of_winning_coalitions
    from pymcda.pt_sorted import SortedPerformanceTable
    from pymcda.ui.graphic import display_electre_tri_models
    from pymcda.electre_tri import MRSort
    from pymcda.types import CriterionValue, CriteriaValues
    from pymcda.types import AlternativePerformances, PerformanceTable
    from pymcda.types import AlternativeAssignment, AlternativesAssignments

    # Generate a random ELECTRE TRI BM model
    random.seed(127890123456789)
    ncriteria = 5
    model = MRSort()
    model.criteria = generate_criteria(ncriteria)
    model.cv = CriteriaValues([CriterionValue('c%d' % (i + 1), 0.2)
                               for i in range(ncriteria)])
    b1 = AlternativePerformances('b1', {'c%d' % (i + 1): 0.5
                                        for i in range(ncriteria)})
    model.bpt = PerformanceTable([b1])
    cat = generate_categories(2)
    model.categories_profiles = generate_categories_profiles(cat)
    model.lbda = 0.6
    vb1 = AlternativePerformances('b1', {'c%d' % (i + 1): random.uniform(0,0.4)
                                         for i in range(ncriteria)})
    model.veto = PerformanceTable([vb1])
    model.veto_weights = model.cv.copy()
    model.veto_lbda = 0.4

    # Generate a set of alternatives
    def test001(self):
        c = generate_criteria(5)
        w1 = CriterionValue('c1', 0.2)
        w2 = CriterionValue('c2', 0.2)
        w3 = CriterionValue('c3', 0.2)
        w4 = CriterionValue('c4', 0.2)
        w5 = CriterionValue('c5', 0.2)
        w = CriteriaValues([w1, w2, w3, w4, w5])

        b1 = AlternativePerformances('b1', {
            'c1': 10,
            'c2': 10,
            'c3': 10,
            'c4': 10,
            'c5': 10
        })
        bpt = PerformanceTable([b1])

        cat = generate_categories(2)
        cps = generate_categories_profiles(cat)

        vb1 = AlternativePerformances('b1', {
            'c1': 2,
            'c2': 2,
            'c3': 2,
            'c4': 2,
            'c5': 2
        }, 'b1')
        v = PerformanceTable([vb1])
        vw = w.copy()

        a1 = AlternativePerformances('a1', {
            'c1': 9,
            'c2': 9,
            'c3': 9,
            'c4': 9,
            'c5': 11
        })
        a2 = AlternativePerformances('a2', {
            'c1': 9,
            'c2': 9,
            'c3': 9,
            'c4': 11,
            'c5': 9
        })
        a3 = AlternativePerformances('a3', {
            'c1': 9,
            'c2': 9,
            'c3': 9,
            'c4': 11,
            'c5': 11
        })
        a4 = AlternativePerformances('a4', {
            'c1': 9,
            'c2': 9,
            'c3': 11,
            'c4': 9,
            'c5': 9
        })
        a5 = AlternativePerformances('a5', {
            'c1': 9,
            'c2': 9,
            'c3': 11,
            'c4': 9,
            'c5': 11
        })
        a6 = AlternativePerformances('a6', {
            'c1': 9,
            'c2': 9,
            'c3': 11,
            'c4': 11,
            'c5': 9
        })
        a7 = AlternativePerformances('a7', {
            'c1': 9,
            'c2': 9,
            'c3': 11,
            'c4': 11,
            'c5': 11
        })
        a8 = AlternativePerformances('a8', {
            'c1': 9,
            'c2': 11,
            'c3': 9,
            'c4': 9,
            'c5': 9
        })
        a9 = AlternativePerformances('a9', {
            'c1': 9,
            'c2': 11,
            'c3': 9,
            'c4': 9,
            'c5': 11
        })
        a10 = AlternativePerformances('a10', {
            'c1': 9,
            'c2': 11,
            'c3': 9,
            'c4': 11,
            'c5': 9
        })
        a11 = AlternativePerformances('a11', {
            'c1': 9,
            'c2': 11,
            'c3': 9,
            'c4': 11,
            'c5': 11
        })
        a12 = AlternativePerformances('a12', {
            'c1': 9,
            'c2': 11,
            'c3': 11,
            'c4': 9,
            'c5': 9
        })
        a13 = AlternativePerformances('a13', {
            'c1': 9,
            'c2': 11,
            'c3': 11,
            'c4': 9,
            'c5': 11
        })
        a14 = AlternativePerformances('a14', {
            'c1': 9,
            'c2': 11,
            'c3': 11,
            'c4': 11,
            'c5': 9
        })
        a15 = AlternativePerformances('a15', {
            'c1': 9,
            'c2': 11,
            'c3': 11,
            'c4': 11,
            'c5': 11
        })
        a16 = AlternativePerformances('a16', {
            'c1': 11,
            'c2': 9,
            'c3': 9,
            'c4': 9,
            'c5': 9
        })
        a17 = AlternativePerformances('a17', {
            'c1': 11,
            'c2': 9,
            'c3': 9,
            'c4': 9,
            'c5': 11
        })
        a18 = AlternativePerformances('a18', {
            'c1': 11,
            'c2': 9,
            'c3': 9,
            'c4': 11,
            'c5': 9
        })
        a19 = AlternativePerformances('a19', {
            'c1': 11,
            'c2': 9,
            'c3': 9,
            'c4': 11,
            'c5': 11
        })
        a20 = AlternativePerformances('a20', {
            'c1': 11,
            'c2': 9,
            'c3': 11,
            'c4': 9,
            'c5': 9
        })
        a21 = AlternativePerformances('a21', {
            'c1': 11,
            'c2': 9,
            'c3': 11,
            'c4': 9,
            'c5': 11
        })
        a22 = AlternativePerformances('a22', {
            'c1': 11,
            'c2': 9,
            'c3': 11,
            'c4': 11,
            'c5': 9
        })
        a23 = AlternativePerformances('a23', {
            'c1': 11,
            'c2': 9,
            'c3': 11,
            'c4': 11,
            'c5': 11
        })
        a24 = AlternativePerformances('a24', {
            'c1': 11,
            'c2': 11,
            'c3': 9,
            'c4': 9,
            'c5': 9
        })
        a25 = AlternativePerformances('a25', {
            'c1': 11,
            'c2': 11,
            'c3': 9,
            'c4': 9,
            'c5': 11
        })
        a26 = AlternativePerformances('a26', {
            'c1': 11,
            'c2': 11,
            'c3': 9,
            'c4': 11,
            'c5': 9
        })
        a27 = AlternativePerformances('a27', {
            'c1': 11,
            'c2': 11,
            'c3': 9,
            'c4': 11,
            'c5': 11
        })
        a28 = AlternativePerformances('a28', {
            'c1': 11,
            'c2': 11,
            'c3': 11,
            'c4': 9,
            'c5': 9
        })
        a29 = AlternativePerformances('a29', {
            'c1': 11,
            'c2': 11,
            'c3': 11,
            'c4': 9,
            'c5': 11
        })
        a30 = AlternativePerformances('a30', {
            'c1': 11,
            'c2': 11,
            'c3': 11,
            'c4': 11,
            'c5': 9
        })
        a31 = AlternativePerformances('a31', {
            'c1': 11,
            'c2': 11,
            'c3': 11,
            'c4': 11,
            'c5': 7
        })
        a32 = AlternativePerformances('a32', {
            'c1': 11,
            'c2': 11,
            'c3': 11,
            'c4': 7,
            'c5': 11
        })
        a33 = AlternativePerformances('a33', {
            'c1': 11,
            'c2': 11,
            'c3': 7,
            'c4': 11,
            'c5': 11
        })
        a34 = AlternativePerformances('a34', {
            'c1': 11,
            'c2': 7,
            'c3': 11,
            'c4': 11,
            'c5': 11
        })
        a35 = AlternativePerformances('a35', {
            'c1': 7,
            'c2': 11,
            'c3': 11,
            'c4': 11,
            'c5': 11
        })
        a36 = AlternativePerformances('a36', {
            'c1': 11,
            'c2': 11,
            'c3': 11,
            'c4': 7,
            'c5': 7
        })
        a37 = AlternativePerformances('a37', {
            'c1': 11,
            'c2': 11,
            'c3': 7,
            'c4': 11,
            'c5': 7
        })
        a38 = AlternativePerformances('a38', {
            'c1': 11,
            'c2': 7,
            'c3': 11,
            'c4': 11,
            'c5': 7
        })
        a39 = AlternativePerformances('a39', {
            'c1': 7,
            'c2': 11,
            'c3': 11,
            'c4': 11,
            'c5': 7
        })
        a40 = AlternativePerformances('a40', {
            'c1': 11,
            'c2': 11,
            'c3': 7,
            'c4': 7,
            'c5': 11
        })
        a41 = AlternativePerformances('a41', {
            'c1': 11,
            'c2': 7,
            'c3': 11,
            'c4': 7,
            'c5': 11
        })
        a42 = AlternativePerformances('a42', {
            'c1': 7,
            'c2': 11,
            'c3': 11,
            'c4': 7,
            'c5': 11
        })
        a43 = AlternativePerformances('a43', {
            'c1': 11,
            'c2': 7,
            'c3': 7,
            'c4': 11,
            'c5': 11
        })
        a44 = AlternativePerformances('a44', {
            'c1': 7,
            'c2': 11,
            'c3': 7,
            'c4': 11,
            'c5': 11
        })
        a45 = AlternativePerformances('a45', {
            'c1': 7,
            'c2': 7,
            'c3': 11,
            'c4': 11,
            'c5': 11
        })
        pt = PerformanceTable([
            a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
            a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28,
            a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41,
            a42, a43, a44, a45
        ])

        ap1 = AlternativeAssignment('a1', 'cat2')
        ap2 = AlternativeAssignment('a2', 'cat2')
        ap3 = AlternativeAssignment('a3', 'cat2')
        ap4 = AlternativeAssignment('a4', 'cat2')
        ap5 = AlternativeAssignment('a5', 'cat2')
        ap6 = AlternativeAssignment('a6', 'cat2')
        ap7 = AlternativeAssignment('a7', 'cat1')
        ap8 = AlternativeAssignment('a8', 'cat2')
        ap9 = AlternativeAssignment('a9', 'cat2')
        ap10 = AlternativeAssignment('a10', 'cat2')
        ap11 = AlternativeAssignment('a11', 'cat1')
        ap12 = AlternativeAssignment('a12', 'cat2')
        ap13 = AlternativeAssignment('a13', 'cat1')
        ap14 = AlternativeAssignment('a14', 'cat1')
        ap15 = AlternativeAssignment('a15', 'cat1')
        ap16 = AlternativeAssignment('a16', 'cat2')
        ap17 = AlternativeAssignment('a17', 'cat2')
        ap18 = AlternativeAssignment('a18', 'cat2')
        ap19 = AlternativeAssignment('a19', 'cat1')
        ap20 = AlternativeAssignment('a20', 'cat2')
        ap21 = AlternativeAssignment('a21', 'cat1')
        ap22 = AlternativeAssignment('a22', 'cat1')
        ap23 = AlternativeAssignment('a23', 'cat1')
        ap24 = AlternativeAssignment('a24', 'cat2')
        ap25 = AlternativeAssignment('a25', 'cat1')
        ap26 = AlternativeAssignment('a26', 'cat1')
        ap27 = AlternativeAssignment('a27', 'cat1')
        ap28 = AlternativeAssignment('a28', 'cat1')
        ap29 = AlternativeAssignment('a29', 'cat1')
        ap30 = AlternativeAssignment('a30', 'cat1')
        ap31 = AlternativeAssignment('a31', 'cat1')
        ap32 = AlternativeAssignment('a32', 'cat1')
        ap33 = AlternativeAssignment('a33', 'cat1')
        ap34 = AlternativeAssignment('a34', 'cat1')
        ap35 = AlternativeAssignment('a35', 'cat1')
        ap36 = AlternativeAssignment('a36', 'cat2')
        ap37 = AlternativeAssignment('a37', 'cat2')
        ap38 = AlternativeAssignment('a38', 'cat2')
        ap39 = AlternativeAssignment('a39', 'cat2')
        ap40 = AlternativeAssignment('a40', 'cat2')
        ap41 = AlternativeAssignment('a41', 'cat2')
        ap42 = AlternativeAssignment('a42', 'cat2')
        ap43 = AlternativeAssignment('a43', 'cat2')
        ap44 = AlternativeAssignment('a44', 'cat2')
        ap45 = AlternativeAssignment('a45', 'cat2')
        aa = AlternativesAssignments([
            ap1, ap2, ap3, ap4, ap5, ap6, ap7, ap8, ap9, ap10, ap11, ap12,
            ap13, ap14, ap15, ap16, ap17, ap18, ap19, ap20, ap21, ap22, ap23,
            ap24, ap25, ap26, ap27, ap28, ap29, ap30, ap31, ap32, ap33, ap34,
            ap35, ap36, ap37, ap38, ap39, ap40, ap41, ap42, ap43, ap44, ap45
        ])

        model = MRSort(c, w, bpt, 0.6, cps, v, vw, 0.4)
        aa2 = model.pessimist(pt)
        ok = compare_assignments(aa, aa2)
        self.assertEqual(ok, 1, "One or more alternatives were wrongly "
                         "assigned")
Esempio n. 33
0
        aid = "a%d" % i
        ap = AlternativePerformances(aid,
                                     OrderedDict({c: 1 if c in coalition else 0
                                                  for c in cids}))
        pt.append(ap)

        cat = cats[0]
        for fmin in fmins:
            if fmin.issubset(set(coalition)) is True:
                cat = cats[1]
                break

        aa.append(AlternativeAssignment(aid, cat))

        i += 1

    return pt, aa

if __name__ == "__main__":
    from pymcda.generate import generate_criteria
    from pymcda.generate import generate_categories

    criteria = generate_criteria(4)
    categories = generate_categories(2)
    pt, aa =  generate_binary_performance_table_and_assignments(criteria,
                                                                categories,
                                                                fmin1)
    print(pt)
    print(aa)
Esempio n. 34
0
    def test001(self):
        c = generate_criteria(5)
        w1 = CriterionValue('c1', 0.2)
        w2 = CriterionValue('c2', 0.2)
        w3 = CriterionValue('c3', 0.2)
        w4 = CriterionValue('c4', 0.2)
        w5 = CriterionValue('c5', 0.2)
        w = CriteriaValues([w1, w2, w3, w4, w5])

        b1 = AlternativePerformances('b1', {'c1': 10, 'c2': 10, 'c3': 10, 'c4': 10, 'c5': 10})
        bpt = PerformanceTable([b1])

        cat = generate_categories(2)
        cps = generate_categories_profiles(cat)

        vb1 = AlternativePerformances('b1', {'c1': 2, 'c2': 2, 'c3': 2, 'c4': 2, 'c5': 2}, 'b1')
        v = PerformanceTable([vb1])
        vw = w.copy()

        a1 = AlternativePerformances('a1',   {'c1':  9, 'c2':  9, 'c3':  9, 'c4':  9, 'c5': 11})
        a2 = AlternativePerformances('a2',   {'c1':  9, 'c2':  9, 'c3':  9, 'c4': 11, 'c5':  9})
        a3 = AlternativePerformances('a3',   {'c1':  9, 'c2':  9, 'c3':  9, 'c4': 11, 'c5': 11})
        a4 = AlternativePerformances('a4',   {'c1':  9, 'c2':  9, 'c3': 11, 'c4':  9, 'c5':  9})
        a5 = AlternativePerformances('a5',   {'c1':  9, 'c2':  9, 'c3': 11, 'c4':  9, 'c5': 11})
        a6 = AlternativePerformances('a6',   {'c1':  9, 'c2':  9, 'c3': 11, 'c4': 11, 'c5':  9})
        a7 = AlternativePerformances('a7',   {'c1':  9, 'c2':  9, 'c3': 11, 'c4': 11, 'c5': 11})
        a8 = AlternativePerformances('a8',   {'c1':  9, 'c2': 11, 'c3':  9, 'c4':  9, 'c5':  9})
        a9 = AlternativePerformances('a9',   {'c1':  9, 'c2': 11, 'c3':  9, 'c4':  9, 'c5': 11})
        a10 = AlternativePerformances('a10', {'c1':  9, 'c2': 11, 'c3':  9, 'c4': 11, 'c5':  9})
        a11 = AlternativePerformances('a11', {'c1':  9, 'c2': 11, 'c3':  9, 'c4': 11, 'c5': 11})
        a12 = AlternativePerformances('a12', {'c1':  9, 'c2': 11, 'c3': 11, 'c4':  9, 'c5':  9})
        a13 = AlternativePerformances('a13', {'c1':  9, 'c2': 11, 'c3': 11, 'c4':  9, 'c5': 11})
        a14 = AlternativePerformances('a14', {'c1':  9, 'c2': 11, 'c3': 11, 'c4': 11, 'c5':  9})
        a15 = AlternativePerformances('a15', {'c1':  9, 'c2': 11, 'c3': 11, 'c4': 11, 'c5': 11})
        a16 = AlternativePerformances('a16', {'c1': 11, 'c2':  9, 'c3':  9, 'c4':  9, 'c5':  9})
        a17 = AlternativePerformances('a17', {'c1': 11, 'c2':  9, 'c3':  9, 'c4':  9, 'c5': 11})
        a18 = AlternativePerformances('a18', {'c1': 11, 'c2':  9, 'c3':  9, 'c4': 11, 'c5':  9})
        a19 = AlternativePerformances('a19', {'c1': 11, 'c2':  9, 'c3':  9, 'c4': 11, 'c5': 11})
        a20 = AlternativePerformances('a20', {'c1': 11, 'c2':  9, 'c3': 11, 'c4':  9, 'c5':  9})
        a21 = AlternativePerformances('a21', {'c1': 11, 'c2':  9, 'c3': 11, 'c4':  9, 'c5': 11})
        a22 = AlternativePerformances('a22', {'c1': 11, 'c2':  9, 'c3': 11, 'c4': 11, 'c5':  9})
        a23 = AlternativePerformances('a23', {'c1': 11, 'c2':  9, 'c3': 11, 'c4': 11, 'c5': 11})
        a24 = AlternativePerformances('a24', {'c1': 11, 'c2': 11, 'c3':  9, 'c4':  9, 'c5':  9})
        a25 = AlternativePerformances('a25', {'c1': 11, 'c2': 11, 'c3':  9, 'c4':  9, 'c5': 11})
        a26 = AlternativePerformances('a26', {'c1': 11, 'c2': 11, 'c3':  9, 'c4': 11, 'c5':  9})
        a27 = AlternativePerformances('a27', {'c1': 11, 'c2': 11, 'c3':  9, 'c4': 11, 'c5': 11})
        a28 = AlternativePerformances('a28', {'c1': 11, 'c2': 11, 'c3': 11, 'c4':  9, 'c5':  9})
        a29 = AlternativePerformances('a29', {'c1': 11, 'c2': 11, 'c3': 11, 'c4':  9, 'c5': 11})
        a30 = AlternativePerformances('a30', {'c1': 11, 'c2': 11, 'c3': 11, 'c4': 11, 'c5':  9})
        a31 = AlternativePerformances('a31', {'c1': 11, 'c2': 11, 'c3': 11, 'c4': 11, 'c5':  7})
        a32 = AlternativePerformances('a32', {'c1': 11, 'c2': 11, 'c3': 11, 'c4':  7, 'c5': 11})
        a33 = AlternativePerformances('a33', {'c1': 11, 'c2': 11, 'c3':  7, 'c4': 11, 'c5': 11})
        a34 = AlternativePerformances('a34', {'c1': 11, 'c2':  7, 'c3': 11, 'c4': 11, 'c5': 11})
        a35 = AlternativePerformances('a35', {'c1':  7, 'c2': 11, 'c3': 11, 'c4': 11, 'c5': 11})
        a36 = AlternativePerformances('a36', {'c1': 11, 'c2': 11, 'c3': 11, 'c4':  7, 'c5':  7})
        a37 = AlternativePerformances('a37', {'c1': 11, 'c2': 11, 'c3':  7, 'c4': 11, 'c5':  7})
        a38 = AlternativePerformances('a38', {'c1': 11, 'c2':  7, 'c3': 11, 'c4': 11, 'c5':  7})
        a39 = AlternativePerformances('a39', {'c1':  7, 'c2': 11, 'c3': 11, 'c4': 11, 'c5':  7})
        a40 = AlternativePerformances('a40', {'c1': 11, 'c2': 11, 'c3':  7, 'c4':  7, 'c5': 11})
        a41 = AlternativePerformances('a41', {'c1': 11, 'c2':  7, 'c3': 11, 'c4':  7, 'c5': 11})
        a42 = AlternativePerformances('a42', {'c1':  7, 'c2': 11, 'c3': 11, 'c4':  7, 'c5': 11})
        a43 = AlternativePerformances('a43', {'c1': 11, 'c2':  7, 'c3':  7, 'c4': 11, 'c5': 11})
        a44 = AlternativePerformances('a44', {'c1':  7, 'c2': 11, 'c3':  7, 'c4': 11, 'c5': 11})
        a45 = AlternativePerformances('a45', {'c1':  7, 'c2':  7, 'c3': 11, 'c4': 11, 'c5': 11})
        pt = PerformanceTable([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
                               a12, a13, a14, a15, a16, a17, a18, a19, a20,
                               a21, a22, a23, a24, a25, a26, a27, a28, a29,
                               a30, a31, a32, a33, a34, a35, a36, a37, a38,
                               a39, a40, a41, a42, a43, a44, a45])

        ap1 = AlternativeAssignment('a1', 'cat2')
        ap2 = AlternativeAssignment('a2', 'cat2')
        ap3 = AlternativeAssignment('a3', 'cat2')
        ap4 = AlternativeAssignment('a4', 'cat2')
        ap5 = AlternativeAssignment('a5', 'cat2')
        ap6 = AlternativeAssignment('a6', 'cat2')
        ap7 = AlternativeAssignment('a7', 'cat1')
        ap8 = AlternativeAssignment('a8', 'cat2')
        ap9 = AlternativeAssignment('a9', 'cat2')
        ap10 = AlternativeAssignment('a10', 'cat2')
        ap11 = AlternativeAssignment('a11', 'cat1')
        ap12 = AlternativeAssignment('a12', 'cat2')
        ap13 = AlternativeAssignment('a13', 'cat1')
        ap14 = AlternativeAssignment('a14', 'cat1')
        ap15 = AlternativeAssignment('a15', 'cat1')
        ap16 = AlternativeAssignment('a16', 'cat2')
        ap17 = AlternativeAssignment('a17', 'cat2')
        ap18 = AlternativeAssignment('a18', 'cat2')
        ap19 = AlternativeAssignment('a19', 'cat1')
        ap20 = AlternativeAssignment('a20', 'cat2')
        ap21 = AlternativeAssignment('a21', 'cat1')
        ap22 = AlternativeAssignment('a22', 'cat1')
        ap23 = AlternativeAssignment('a23', 'cat1')
        ap24 = AlternativeAssignment('a24', 'cat2')
        ap25 = AlternativeAssignment('a25', 'cat1')
        ap26 = AlternativeAssignment('a26', 'cat1')
        ap27 = AlternativeAssignment('a27', 'cat1')
        ap28 = AlternativeAssignment('a28', 'cat1')
        ap29 = AlternativeAssignment('a29', 'cat1')
        ap30 = AlternativeAssignment('a30', 'cat1')
        ap31 = AlternativeAssignment('a31', 'cat1')
        ap32 = AlternativeAssignment('a32', 'cat1')
        ap33 = AlternativeAssignment('a33', 'cat1')
        ap34 = AlternativeAssignment('a34', 'cat1')
        ap35 = AlternativeAssignment('a35', 'cat1')
        ap36 = AlternativeAssignment('a36', 'cat2')
        ap37 = AlternativeAssignment('a37', 'cat2')
        ap38 = AlternativeAssignment('a38', 'cat2')
        ap39 = AlternativeAssignment('a39', 'cat2')
        ap40 = AlternativeAssignment('a40', 'cat2')
        ap41 = AlternativeAssignment('a41', 'cat2')
        ap42 = AlternativeAssignment('a42', 'cat2')
        ap43 = AlternativeAssignment('a43', 'cat2')
        ap44 = AlternativeAssignment('a44', 'cat2')
        ap45 = AlternativeAssignment('a45', 'cat2')
        aa = AlternativesAssignments([ap1, ap2, ap3, ap4, ap5, ap6, ap7, ap8,
                                      ap9, ap10, ap11, ap12, ap13, ap14, ap15,
                                      ap16, ap17, ap18, ap19, ap20, ap21,
                                      ap22, ap23, ap24, ap25, ap26, ap27,
                                      ap28, ap29, ap30, ap31, ap32, ap33,
                                      ap34, ap35, ap36, ap37, ap38, ap39,
                                      ap40, ap41, ap42, ap43, ap44, ap45])

        model = MRSort(c, w, bpt, 0.6, cps, v, vw, 0.4)
        aa2 = model.pessimist(pt)
        ok = compare_assignments(aa, aa2)
        self.assertEqual(ok, 1, "One or more alternatives were wrongly "
                         "assigned")
    def test002(self):
        random.seed(1)
        c = generate_criteria(10)
        capacities = generate_random_capacities(c)

        self.assertTrue(capacities_are_monotone(c, capacities))