示例#1
0
    def testDisappearWhenCreatingChildren(self):
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()
        myWorld.run()
        index = Point2DInt(0,0)
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eWater)

        myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)
        myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)
        
        myAP = ap.AP('ap_0')
        myWorld.addAgent(myAP)
        
        myAP._population[0] =-1
        myAP._population[1] =-1
        myAP._population.append(20)
        myAP2 = ap.AP('ap_1')
        myWorld.addAgent(myAP2)
        myAP2._population[0] =-1
        myAP2._population[1] =-1
        myAP2._population.append(20)

        myAP.createAgent(2)
        
        self.assertEqual(myAP.getNumberOfIndividuals(),0)
        self.assertEqual(myAP2.getNumberOfIndividuals(),0)
示例#2
0
def main():
    if len(sys.argv)==1:
        print("Syntax: analyse.py <testbed>")
        exit(0)
    testbed_name = sys.argv[1]
    queries = readin_testbed_queries(testbed_name)

    stats = {}
    stats['unmodified'] = {'map': 0, 'avg_ndcg' : 0}
    stats['modified']   = {'map': 0, 'avg_ndcg' : 0}
    # iterate through queries applying modified and unmodified search to obtain AP and NDCG values
    for query_file_name in queries:
        query_sentence = queries[query_file_name]
        temp_arr = query_file_name.split('.')
        query_number = temp_arr[1]
        print()
        print('='*100)
        print('Carrying out analysis for query : ' + query_sentence)
        # analysis using unmodified engine
        result, accum, titles = submit_query(testbed_name, query_sentence, False)
        ap_score = ap.AP(result, query_number, testbed_name, parameters.docs_to_consider)
        ndcg_score = ndcg.NDCG(result, query_number, testbed_name, parameters.docs_to_consider)
        stats['unmodified']['map'] += ap_score
        stats['unmodified']['avg_ndcg'] += ndcg_score
        print('*'*100)
        print('Unmodified engine AP score   : ' + str(ap_score))
        print('Unmodified engine NDCG score : ' + str(ndcg_score))
        # analysis using modified engine
        result, accum, titles = submit_query(testbed_name, query_sentence, True)
        ap_score  =ap.AP(result, query_number, testbed_name, parameters.docs_to_consider)
        ndcg_score = ndcg.NDCG(result, query_number, testbed_name, parameters.docs_to_consider)
        stats['modified']['map'] += ap_score
        stats['modified']['avg_ndcg'] += ndcg_score
        print('*'*100)
        print('Modified engine AP score     : ' + str(ap_score))
        print('Modified engine NDCG score   : ' + str(ndcg_score))

    # calculate MAP and average NDCG
    num_queries = len(queries)
    stats['unmodified']['map'] = stats['unmodified']['map']/num_queries
    stats['unmodified']['avg_ndcg'] = stats['unmodified']['avg_ndcg']/num_queries
    stats['modified']['map'] = stats['modified']['map']/num_queries
    stats['modified']['avg_ndcg'] = stats['modified']['avg_ndcg']/num_queries

    print()
    print("+"*100)
    print('Unmodified engine MAP          : ' + str(stats['unmodified']['map']))
    print('Unmodified engine average NDCG : ' + str(stats['unmodified']['avg_ndcg']))
    print("*"*100)
    print('Modified engine MAP            : ' + str(stats['modified']['map']))
    print('Modified engine average NDCG   : ' + str(stats['modified']['avg_ndcg']))
示例#3
0
    def testSearchSuitableHome(self):
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()
        myWorld.run()

        index = Point2DInt(0,0)        
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eWater)
    
        myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)
        myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)

        myAP = ap.AP('ap_0')
        myWorld.addAgent(myAP)
        myWorld._yearRainfall = 444.0
        myWorld.updateCalories()
        myAP.searchSuitableHome()
        self.assertEqual(myAP.position._x,0)
        self.assertEqual(myAP.position._y,0)
        
        self.assertEqual(len(myAP._plots), 1)
示例#4
0
 def testManageAnimals(self):
     myAP = ap.AP('ap_1')
     myAP._animalsProbability = 1.0
     self.assertTrue(myAP._numAnimals== 0)
     
     testConfig = ap.MyWorldConfig('testConfig.xml');
     myWorld = TestMyWorld(testConfig)
     myWorld.initialize()
     myWorld.run()
 
     index = Point2DInt(0,0)
     for index._x in range(testConfig.size._width):
         for index._y in range(testConfig.size._height):
             myWorld.setValue('ground', index, ap.cellTypes.eDune)
 
     myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)     
     myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eInterdune)
     myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
     myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)
     
     myWorld.addAgent(myAP)
     myAP.position = myWorld.getRandomDune()
     
     myAP.manageAnimals()
     myAP.manageAnimals()
     myAP.manageAnimals()
     
     self.assertTrue(myAP._numAnimals== 1)
示例#5
0
    def testAbandonPlots(self):     
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()
        myWorld.run()

        index = Point2DInt(0,0)
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eDune)
    
        myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)
        myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)
            
        myAP = ap.AP('ap_0')        
        myWorld.addAgent(myAP)
        myAP.position = myWorld.getRandomDune()

        myAP._population.append(2)
        myAP._population.append(5)
        myAP._population.append(10)
        myAP._population.append(13)

        myWorld.stepEnvironment()

        myAP._population.pop()
        myAP._population.pop()
        myAP._population.pop()
        myAP._population.pop()
        myAP.searchSuitableHome()
        self.assertEqual(len(myAP._plots), 1)
示例#6
0
    def testNumberOfPlotsNeeded(self):  
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()
        myWorld.run()

        index = Point2DInt(0,0)
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eDune)

        myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)
        myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)
        
        myAP = ap.AP('ap_0')        
        myWorld.addAgent(myAP)
        myAP.position = myWorld.getRandomDune()

        myAP._population.append(2)
        myAP._population.append(5)
        myAP._population.append(10)
        myAP._population.append(13)
        myWorld._yearRainfall = 444.0
        myWorld.updateCalories()
        myWorld.increaseYearsUsed() 

        self.assertEqual(myAP.plotsNeeded(), 2)
        myAP.searchSuitableHome()
        self.assertEqual(len(myAP._plots), 2)
示例#7
0
    def testSurvival(self): 
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()
        myWorld.run()
    
        index = Point2DInt(0,0)
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eDune)
    
        myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)
        myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)

        myAP = ap.AP('ap_0')
        myWorld.addAgent(myAP)
        myAP.position = myWorld.getRandomDune()
        
        myWorld._yearRainfall = 444
        myAP.searchSuitableHome()
        
        myWorld.updateCalories()
        myAP.updateState()
        self.assertEqual(myAP._starvationRate, 0)
示例#8
0
    def testSurplus(self):
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()
        myWorld.run()
    
        index = Point2DInt(0,0)
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eDune)
    
        myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)     
        myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)

        myAP = ap.AP('ap_0')
        myWorld.addAgent(myAP)
        myAP.position = myWorld.getRandomDune()
        
        myWorld._yearRainfall = 444.0
        myWorld.updateCalories()
        myAP.searchSuitableHome()
        myAP.manageFarmActivities()
        self.assertTrue(myAP._surplus> 0)
        
        
        myAP = ap.AP('ap_1')
        myWorld.addAgent(myAP)
        myAP.position = myWorld.getRandomDune()
        
        myWorld._yearRainfall = 50
        myWorld.updateCalories()
        myAP.searchSuitableHome()
        myAP.manageFarmActivities()
        self.assertTrue(myAP._surplus== 0)
        
        myAP = ap.AP('ap_2')
        myWorld.addAgent(myAP)
        myAP.position = myWorld.getRandomDune()
        
        myWorld._yearRainfall = 1100.0
        myWorld.updateCalories()
        myAP.searchSuitableHome()
        myAP.manageFarmActivities()
        self.assertTrue(myAP._surplus== 0)
示例#9
0
    def testCaloriesPerAge(self):
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()

        myAP = ap.AP('ap_0')
        myAP._population.append(2)
        myAP._population.append(5)
        myAP._population.append(10)
        myAP._population.append(13)
        myWorld.addAgent(myAP)
    
        self.assertTrue(abs(myAP.getNeededCalories()-9175.9*365.0) < 50.0)
        myWorld.run()
示例#10
0
    def testSurvivalNewPlot(self):  
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()
    
        index = Point2DInt(0,0)
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eDune)
    
        myWorld.setValue('ground', Point2DInt(0,0), ap.cellTypes.eDune)
        myWorld.setValue('ground', Point2DInt(0,1), ap.cellTypes.eDune)
        myWorld.setValue('ground', Point2DInt(1,1), ap.cellTypes.eInterdune)
        myWorld.setValue('ground', Point2DInt(1,0), ap.cellTypes.eInterdune)


        myAP = ap.AP('ap_0')
        myWorld.addAgent(myAP)
        myAP.position = myWorld.getRandomDune()
        
        myWorld._yearRainfall = 444.0
        myWorld.updateCalories()
        myWorld.increaseYearsUsed() 
        myAP.searchSuitableHome()
        myAP.manageFarmActivities()

        plot = Point2DInt(myAP._plots[0]._x, myAP._plots[0]._y)
        self.assertEqual(plot._y, myAP._plots[0]._y)
        self.assertTrue(myAP._starvationRate < 1)

        myWorld.updateCalories()
        myWorld.increaseYearsUsed()
        myAP.manageFarmActivities()
    
        myWorld.updateCalories()
        myWorld.increaseYearsUsed()
        myAP.manageFarmActivities()
    
        self.assertNotEqual(plot._y, myAP._plots[0]._y)
        self.assertNotEqual(-1, myAP._plots[0]._y)
        self.assertTrue(myAP._starvationRate < 1)   

        myWorld.updateCalories()
        myWorld.increaseYearsUsed() 
        myAP.updateState()  
        
        self.assertNotEqual(plot._y, myAP._plots[0]._y)
        self.assertNotEqual(-1, myAP._plots[0]._y)
        self.assertTrue(myAP._starvationRate < 1)
示例#11
0
    def testDisappearNotPlot(self):
        testConfig = ap.MyWorldConfig('testConfig.xml');
        myWorld = TestMyWorld(testConfig)
        myWorld.initialize()

        myAP = ap.AP('ap_0')
        myWorld.addAgent(myAP)
        
        index = Point2DInt(0,0)  
        for index._x in range(testConfig.size._width):
            for index._y in range(testConfig.size._height):
                myWorld.setValue('ground', index, ap.cellTypes.eDune)

        myAP.position = myWorld.getRandomDune()
        myWorld.run()
        reference = myWorld.getAgent('ap_0')
        self.assertEqual(reference, None)
示例#12
0
def get_testbed_stats(testbed_name, queries):
    MAP = 0
    avg_NDCG = 0
    # get AP and NDCG score for each query
    for query_file_name in queries:
        query = queries[query_file_name]
        result, accum, titles = analyse.submit_query(testbed_name, query, True)
        temp_arr = query_file_name.split('.')
        query_number = temp_arr[1]
        ap_score = ap.AP(result, query_number, testbed_name,
                         parameters.docs_to_consider)
        ndcg_score = ndcg.NDCG(result, query_number, testbed_name,
                               parameters.docs_to_consider)
        MAP += ap_score
        avg_NDCG += ndcg_score
    MAP = MAP / len(queries)
    avg_NDCG = avg_NDCG / len(queries)
    return MAP, avg_NDCG
示例#13
0
 def get_network(self):
     for item in self.data:
         if 'latitude' in item:
             lat = float(item['latitude'])
         else:
             continue
         if 'longitude' in item:
             lon = float(item['longitude'])
         else:
             continue
         if 'altitude' in item:
             alt = float(item['altitude'])
         else:
             alt = 10.0
         if 'radius' in item:
             rad = int(item['radius'], 10)
         else:
             rad = 100
         self.ap_list.append(ap.AP(lat, lon, alt, rad))
         self.ap_list[-1].get_cover()
     self.net = net.Network(self.ap_list)
示例#14
0
def main():
    if len(sys.argv) == 1:
        print(
            "Syntax: optimise.py <option -a for all or -s for single testbed> <testbed, if -s option> <num of docs to consider for MAP and NDCG analysis>"
        )
        exit(0)
    option = sys.argv[1]
    if option == '-a':
        parameters.docs_to_consider = int(sys.argv[2])
        testbed_names = [
            'testbed1', 'testbed2', 'testbed3', 'testbed4', 'testbed5',
            'testbed6', 'testbed7', 'testbed8', 'testbed9', 'testbed11',
            'testbed12', 'testbed13', 'testbed14', 'testbed15', 'testbed16'
        ]
        indicative_terms, top_k_documents = all_testbeds_optimise(
            testbed_names)
        print('+' * 100)
        print('Optimal indicative terms : ' + str(indicative_terms))
        print('Optimal top k documents  : ' + str(top_k_documents))
        print('+' * 100)
    else:
        parameters.docs_to_consider = int(sys.argv[3])
        testbed_name = sys.argv[2]
        queries = analyse.readin_testbed_queries(testbed_name)

        max_MAP = 0
        max_avg_NDCG = 0
        optimal_indicative_terms = 0
        optimal_top_k_documents = 0
        # test 1-50 indicative terms and top k documents
        for i in range(20):
            parameters.number_indicative_terms = i + 1
            for j in range(20):
                parameters.number_top_k_documents = j + 1
                current_MAP = 0
                current_avg_NDCG = 0
                query_number = 1
                for query_sentence in queries:
                    result, accum, titles = analyse.submit_query(
                        testbed_name, query_sentence, True)
                    ap_score = ap.AP(result, query_number, testbed_name,
                                     parameters.docs_to_consider)
                    ndcg_score = ndcg.NDCG(result, query_number, testbed_name,
                                           parameters.docs_to_consider)
                    current_MAP += ap_score
                    current_avg_NDCG += ndcg_score
                    query_number += 1
                current_MAP = current_MAP / len(queries)
                current_avg_NDCG = current_avg_NDCG / len(queries)
                print('=' * 100)
                print('+' * 100)
                print('Number of docs to consider : ' +
                      str(parameters.docs_to_consider))
                print('Number of indicative terms : ' +
                      str(parameters.number_indicative_terms))
                print('Number of top k documents  : ' +
                      str(parameters.number_top_k_documents))
                print('Optimal indicative terms   : ' +
                      str(optimal_indicative_terms))
                print('Optimal top k documents    : ' +
                      str(optimal_top_k_documents))
                print('+' * 100)
                print('Calculated MAP             : ' + str(current_MAP))
                print('Calculated Average NDCG    : ' + str(current_avg_NDCG))
                print('*' * 100)
                print('Current max MAP            : ' + str(max_MAP))
                print('Current max Average NDCG   : ' + str(max_avg_NDCG))
                print('=' * 100)
                if (current_avg_NDCG + current_MAP) > (max_avg_NDCG + max_MAP):
                    max_MAP = current_MAP
                    max_avg_NDCG = current_avg_NDCG
                    optimal_indicative_terms = parameters.number_indicative_terms
                    optimal_top_k_documents = parameters.number_top_k_documents
        print('#' * 100)
        print('Final max MAP     : ' + str(max_MAP))
        print('Final max Average : ' + str(max_avg_NDCG))
        print('Optimal indicative terms : ' + str(optimal_indicative_terms))
        print('Optimal top k documents  : ' + str(optimal_top_k_documents))
        print('#' * 100)