Esempio n. 1
0
    def test_at_most(self):
        # variables, domains, assignments
        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
        at_most = AtMostTwoConstraint()
        self.assertEqual(0, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
        at_most = AtMostTwoConstraint()
        self.assertEqual(0, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}
        at_most = AtMostTwoConstraint()
        self.assertEqual(0, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 2, 'c': 3, 'e': 1}
        at_most = AtMostTwoConstraint()
        self.assertEqual(0, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 1, 'c': 3, 'd': 4, 'e': 1}
        at_most = AtMostTwoConstraint()
        self.assertEqual(1, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 1, 'c': 1, 'd': 4, 'e': 5}
        at_most = AtMostTwoConstraint()
        self.assertEqual(1, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 1, 'c': 1, 'd': 4}
        at_most = AtMostTwoConstraint()
        self.assertEqual(1, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1}
        at_most = AtMostTwoConstraint()
        self.assertEqual(3, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 1, 'c': 3, 'e': 1}
        at_most = AtMostTwoConstraint()
        self.assertEqual(1, at_most(variables, None, assignments))

        variables = ['a', 'b', 'c', 'd', 'e']
        assignments = {'a': 1, 'b': 1, 'c': 3, 'd': 4, 'e': 1}
        at_most = AtMostTwoConstraint()
        self.assertEqual(1, at_most(variables, None, assignments))
Esempio n. 2
0
    def test_big_no_result(self):
        configuration = Configuration('''8
5
Russia,Germany,Brazil,Portugal,Argentina,Belgium,Poland,France
Spain,Peru,Switzerland,England,Colombia,Mexico,Uruguay,Croatia
Denmark,Iceland,Costa Rica,Sweden,Tunisia,Egypt,Senegal,Iran
Australia,Japan,Morocco,Panama,South Korea,Saudi Arabia,USA,Bolivia
Chile,Paraguay,Serbia,Nigeria,Italy,Netherlands,Czech Republic,China
AFC:South Korea,Saudi Arabia,Iran,Japan,Australia,China
CAF:Tunisia,Egypt,Senegal,Morocco,Nigeria
CONCACAF:Mexico,Panama,Costa Rica,USA
CONMEBOL:Brazil,Argentina,Uruguay,Colombia,Peru,Bolivia,Chile,Paraguay
UEFA:France,Germany,England,Russia,Portugal,Belgium,Poland,Switzerland,Croatia,Denmark,Iceland,Serbia,Spain,Sweden,Italy,Netherlands,Czech Republic
OFC:None''')
        minConflictSolver = MinConflictSolver()
        for pot in configuration.pots.values():
            minConflictSolver.add_variable(pot, range(0, configuration.group))
            minConflictSolver.add_constraint(AllDifferentConstraint(), pot)
        for team_name, teams in configuration.teams.iteritems():
            if team_name == 'UEFA':
                minConflictSolver.add_constraint(AtMostTwoConstraint(), teams)
            else:
                minConflictSolver.add_constraint(AllDifferentConstraint(),
                                                 teams)
        solution = minConflictSolver.get_solution()
        output = defaultdict(list)
        if solution is not None:
            for team_name, group in solution.iteritems():
                output[group].append(team_name)
        self.assertEqual(0, len(output))
Esempio n. 3
0
    def test_small(self):
        configuration = Configuration('''3
4
Russia,Brazil,Argentina
Germany,Italy,England
France,Iran,Mexico
USA,Japan,Australia
AFC:Iran,Japan,Australia
CAF:None
OFC:None
CONCACAF:USA,Mexico
CONMEBOL:Brazil,Argentina
UEFA:France,Germany,Italy,England,Russia''')
        minConflictSolver = MinConflictSolver()
        for pot in configuration.pots.values():
            minConflictSolver.add_variable(pot, range(0, configuration.group))
            minConflictSolver.add_constraint(AllDifferentConstraint(), pot)
        for team_name, teams in configuration.teams.iteritems():
            if team_name == 'UEFA':
                minConflictSolver.add_constraint(AtMostTwoConstraint(), teams)
            else:
                minConflictSolver.add_constraint(AllDifferentConstraint(),
                                                 teams)
        solution = minConflictSolver.get_solution()
        output = defaultdict(list)
        if solution is not None:
            for team_name, group in solution.iteritems():
                output[group].append(team_name)
        print(solution_generator(solution, configuration.group))
        result_tester(configuration, solution)
Esempio n. 4
0
 def test_share(self):
     for filename in os.listdir('share_case'):
         start = int(round(time.time() * 1000))
         if filename.endswith(".txt"):
             with open("share_case/" + filename) as f:
                 print("processing file: " + filename)
                 file_lines = f.read()
                 configuration = Configuration(file_lines)
                 minConflictSolver = MinConflictSolver()
             for pot in configuration.pots.values():
                 minConflictSolver.add_variable(
                     pot, range(0, configuration.group))
                 minConflictSolver.add_constraint(AllDifferentConstraint(),
                                                  pot)
             for team_name, teams in configuration.teams.iteritems():
                 if team_name == 'UEFA':
                     minConflictSolver.add_constraint(
                         AtMostTwoConstraint(), teams)
                 else:
                     minConflictSolver.add_constraint(
                         AllDifferentConstraint(), teams)
             solution = minConflictSolver.get_solution()
             if solution is None:
                 print(filename + ' NONE!!')
             result_tester(configuration, solution)
             with open("share_case/output_" + filename + '.out',
                       'w') as the_file:
                 the_file.write(
                     solution_generator(solution, configuration.group))
                 the_file.write("\nreading, running, checking time: " +
                                str(int(round(time.time() * 1000)) -
                                    start) + ' ms')
             continue
         else:
             continue
Esempio n. 5
0
    def test_case3(self):
        configuration = Configuration('''8
4
Russia,Germany,Brazil,Portugal,Argentina,Belgium,Poland,France
Spain,Peru,Switzerland,England,Colombia,Mexico,Uruguay,Croatia
Denmark,Iceland,Costa Rica,Sweden,Tunisia,Egypt,Senegal,Iran
Serbia,Nigeria,Australia,Japan,Morocco,Panama,South Korea,Saudi Arabia
AFC:South Korea,Saudi Arabia,Iran,Japan,Australia
CAF:Tunisia,Egypt,Senegal,Morocco,Nigeria
CONCACAF:Mexico,Panama,Costa Rica
CONMEBOL:Brazil,Argentina,Uruguay,Colombia,Peru
UEFA:France,Germany,England,Russia,Portugal,Belgium,Poland,Switzerland,Croatia,Denmark,Iceland,Serbia,Spain,Sweden
OFC:None''')
        minConflictSolver = MinConflictSolver()
        for pot in configuration.pots.values():
            minConflictSolver.add_variable(pot, range(0, configuration.group))
            minConflictSolver.add_constraint(AllDifferentConstraint(), pot)
        for team_name, teams in configuration.teams.iteritems():
            if team_name == 'UEFA':
                minConflictSolver.add_constraint(AtMostTwoConstraint(), teams)
            else:
                minConflictSolver.add_constraint(AllDifferentConstraint(),
                                                 teams)
        solution = minConflictSolver.get_solution()
        output = defaultdict(list)
        if solution is not None:
            for team_name, group in solution.iteritems():
                output[group].append(team_name)
        print(solution_generator(solution, configuration.group))
        result_tester(configuration, solution)
Esempio n. 6
0
    def test_huge(self):
        configuration = Configuration('''27
25
AHL,WSS,SGB
ZCD,QMQ,AAQ,PLR,VDM
GOL,PXW,FIP
HRJ,YVF
JFV,SDQ
IQG,IHZ,LEN,PKP
QBF,XAO,LFS,GAH
WKL,LVD,JQE,NDT,QZK,REW,HJN
KLV,ROP,NXT,IEV,KRI,YRA,BUS,KCW
TBY,RPW,CPP
RMP,PGU
FSW,DGY,FRY,ADH,AOD
ZLX,GTE
ITJ,KDP,GPM,SFB,YIS
DXU,WBM,UVT,TAN,BSN,SMS,AIL
QNY,JQH,XCZ
PVW,BDD,FRE,VTB,CTZ,JJE,NIY,LKR,HHC
EUE,TNN,PSL
QZS,GGQ,ZUR,JXZ,RPJ
FIV,OFZ,RWF,WIB,BJS,UDP,DWE
HNH,GMA,ASE,ZTQ,LIS,XYE,JFP,WWR,XZJ
LPD,DVC,LYV,LXK
IND,YJW,GUO,SQI,ZLU,LZA
TIT,RGM,DED,BSK,KIP
AXU,F*G,EES,BEP,YWM,KJK,ZYO,TAD,PYO
AFC:EES,QNY,YJW,FSW,RPW,UVT,SQI,ZUR,VTB,TIT,BEP,LPD,SMS,LFS,ZLU,LEN,RPJ,LZA
CAF:IND,GOL,GPM,WBM,LIS,PXW,BSN,BJS,YWM,YRA,JQH,DVC,LYV,ADH,PLR,SGB,FIP,LXK
OFC:KLV,ZCD,ASE,KDP,QZS,RMP,TAN,JQE,NXT,WSS,IEV,JFP,DGY,BSK,KCW,CPP,HHC
CONCACAF:FIV,DXU,GMA,QMQ,EUE,OFZ,ZLX,ZTQ,AAQ,GUO,RWF,AHL,FRE,NDT,JJE,WWR,DED,SFB,VDM,YVF,GAH,PGU,AOD
CONMEBOL:AXU,PVW,IQG,HRJ,BDD,XAO,IHZ,XYE,QZK,KRI,KJK,BUS,NIY,FRY,REW,ZYO,LKR,TAD,HJN,GTE,YIS,PSL,DWE
UEFA:HNH,F*G,TBY,ITJ,QBF,WKL,LVD,ROP,WIB,GGQ,TNN,CTZ,UDP,JFV,RGM,JXZ,SDQ,PKP,AIL,XCZ,XZJ,KIP,PYO'''
                                      )
        minConflictSolver = MinConflictSolver()
        for pot in configuration.pots.values():
            minConflictSolver.add_variable(pot, range(0, configuration.group))
            minConflictSolver.add_constraint(AllDifferentConstraint(), pot)
        for team_name, teams in configuration.teams.iteritems():
            if team_name == 'UEFA':
                minConflictSolver.add_constraint(AtMostTwoConstraint(), teams)
            else:
                minConflictSolver.add_constraint(AllDifferentConstraint(),
                                                 teams)
        for _ in range(100):
            solution = minConflictSolver.get_solution()
            if solution is not None:
                break
            print("restart======")
        output = defaultdict(list)
        if solution is not None:
            for team_name, group in solution.iteritems():
                output[group].append(team_name)
        print(solution_generator(solution, configuration.group))
        result_tester(configuration, solution)
Esempio n. 7
0
    def test_huge2(self):
        configuration = Configuration('''27
23
YCP
XWX,ZON,CAL,LSA
JGJ,TFS,EDS,MXK
UHK,GZG,CGA,HOX,RIQ
RKV,TGN,WSP,ISR
FCZ,TRU,OTL,VNZ,MQQ
WLB,SYJ,EON,NGZ,WUA
DKQ,HCZ,HYE
HHQ,HGD,DXG,KLS,PVN,IUY,VLN
XMX,ONA,NNT,ICF,RXP,LHV,QII
SCD,PZM,EUY
NGE,UDT,IIO,HYH,ZLD,IBZ,WIL
GPP,TCF,VLD,YZA,PIL,VNN,JVN
NBW,XRC,GMW,ZPO,RNV
QIR,POA,EEU,EHT
QOB,BHS,RPN
MDS,WQH,EQR,QQN,YPS
TEW,XJF,QMR,FNV,ONP,OOW,LRX
LEJ,QXD,PBT,ZCK,EBY,YOS
BMQ,TJU
JRK,UFL,YXB,HOD,DDH,KSW,AXT,SIG,EWT
JHQ,LZK,UFG
NXC,IQJ,JJU,AAD,DRM,XZQ,SQO,MUW
AFC:NBW,NXC,FCZ,ZON,ICF,CAL,IUY,VNN,KSW,NGZ,AXT,HCZ,EHT
CAF:XWX,TEW,UFL,XRC,FNV,IQJ,QOB,HOD,ZLD,LHV,IBZ,EON,HOX,QQN,DKQ,XZQ,ZCK,EUY,LRX,YOS,UFG,MUW
OFC:HHQ,SCD,XJF,NGE,NNT,MDS,GMW,PVN,ZPO,PIL,SYJ,MXK,ISR,WUA,HYE,WIL,RNV,YPS
CONCACAF:JGJ,OTL,QMR,KLS,LEJ,LZK,UDT,YXB,QXD,EQR,SIG,YCP,QII,EWT
CONMEBOL:JHQ,WLB,XMX,JRK,HGD,TRU,GPP,TCF,RKV,VNZ,IIO,UHK,YZA,BMQ,CGA,AAD,POA,DDH,EBY,LSA,MQQ
UEFA:ONA,RXP,DXG,WQH,QIR,PZM,VLD,GZG,HYH,TFS,BHS,JJU,ONP,PBT,DRM,EDS,SQO,TGN,OOW,EEU,WSP,RIQ,VLN,JVN,RPN,TJU'''
                                      )
        minConflictSolver = MinConflictSolver()
        for pot in configuration.pots.values():
            minConflictSolver.add_variable(pot, range(0, configuration.group))
            minConflictSolver.add_constraint(AllDifferentConstraint(), pot)
        for team_name, teams in configuration.teams.iteritems():
            if team_name == 'UEFA':
                minConflictSolver.add_constraint(AtMostTwoConstraint(), teams)
            else:
                minConflictSolver.add_constraint(AllDifferentConstraint(),
                                                 teams)
        for _ in range(100):
            solution = minConflictSolver.get_solution()
            if solution is not None:
                break
            print("restart======")
        output = defaultdict(list)
        if solution is not None:
            for team_name, group in solution.iteritems():
                output[group].append(team_name)
        print(solution_generator(solution, configuration.group))
        result_tester(configuration, solution)