def calc_results_with_exchnages(first_alg_method, first_exp_type, second_exp_type, values, num_of_agents, noise, fraud_agent_index, identical_values, identical_exp_type, results_by_exp_type): res = {} division = first_alg_method(values, fraud_agent_index) additional1 = {} if fraud_agent_index is not None: additional1[utils.additionalFields.fraud_agent_index()] = fraud_agent_index if identical_values is not None: identical_values_division = first_alg_method(identical_values, fraud_agent_index) results_by_exp_type[identical_exp_type].append(ExpKey.ExpKey(identical_exp_type, num_of_agents, 0, identical_values_division, additional1)) results_by_exp_type[first_exp_type].append(ExpKey.ExpKey(first_exp_type, num_of_agents, noise, division, additional1)) numbersUtils.set_allocations_grade(division) num_of_changes = strategyUtil.try_to_exchange_by_agents(division) additional = {} additional[utils.additionalFields.numberOfExchanges()] = num_of_changes if fraud_agent_index is not None: additional[utils.additionalFields.fraud_agent_index()] = fraud_agent_index #res[second_exp_type] = ExpKey.ExpKey(second_exp_type, num_of_agents, noise, division, additional) results_by_exp_type[second_exp_type].append(ExpKey.ExpKey(second_exp_type, num_of_agents, noise, division, additional)) return res
def calc_single_row(num_of_agents, noise, values, identical_values, env_influence_values, main_alg_method): #main alg main_alg_division = main_alg_method(deepcopy(values), None) main_alg_measures = cakepartitionsUtil.alg_division_to_measures(main_alg_division) #main alg with exchange #todo: clone the division exchange_main_alg_division = deepcopy(main_alg_division) numbersUtils.set_allocations_grade(exchange_main_alg_division) main_alg_num_of_changes = strategyUtil.try_to_exchange_by_agents(exchange_main_alg_division) exchange_main_alg_measures = cakepartitionsUtil.alg_division_to_measures(exchange_main_alg_division) exchange_main_alg_measures.addAdditionalData('num_of_changes', main_alg_num_of_changes) #identical values identical_values_main_alg_division = main_alg_method(identical_values, None) identical_alg_measures = cakepartitionsUtil.alg_division_to_measures(identical_values_main_alg_division) #identical with exchange #todo: clone the division exchange_identical__main_alg_division = deepcopy(identical_values_main_alg_division) numbersUtils.set_allocations_grade(exchange_identical__main_alg_division) main_with_identical__alg_num_of_changes = strategyUtil.try_to_exchange_by_agents(exchange_identical__main_alg_division) exchange_identical_alg_measures = cakepartitionsUtil.alg_division_to_measures(exchange_identical__main_alg_division) exchange_identical_alg_measures.addAdditionalData('num_of_changes', main_with_identical__alg_num_of_changes) #env influence main_alg_division_env_influence = main_alg_method(env_influence_values, None) influence_alg_measures = cakepartitionsUtil.alg_division_to_measures(main_alg_division_env_influence) #env influence after change exchange_identicalenv_influence_main_alg_division = deepcopy(main_alg_division_env_influence) numbersUtils.set_allocations_grade(exchange_identicalenv_influence_main_alg_division) main_with_env_influence_alg_num_of_changes = strategyUtil.try_to_exchange_by_agents(exchange_identicalenv_influence_main_alg_division) exchange_influence_alg_measures = cakepartitionsUtil.alg_division_to_measures(exchange_identicalenv_influence_main_alg_division) exchange_influence_alg_measures.addAdditionalData('num_of_changes', main_with_env_influence_alg_num_of_changes) fraud_agent_index_to_fraud_division = {} fraud_agent_index_to_measures = {} for agent_index in range(num_of_agents): fraud_main_alg_division = main_alg_method(deepcopy(values), agent_index) fraud_agent_index_to_fraud_division[agent_index] = fraud_main_alg_division fraud_agent_index_to_measures[agent_index] = cakepartitionsUtil.alg_division_to_measures(fraud_main_alg_division, False) return AlgResult(num_of_agents, noise, main_alg_measures, identical_alg_measures, influence_alg_measures, fraud_agent_index_to_measures, exchange_main_alg_measures, exchange_identical_alg_measures, exchange_influence_alg_measures)