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)
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']))
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)
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)
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)
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)
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)
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)
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()
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)
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)
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
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)
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)