Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.20 KB | None | 0 0
  1. import math
  2. import copy
  3. import scipy.integrate as integrate
  4.  
  5.  
  6. class Node:
  7.     traffic = 0
  8.     """(destination node, capacity)"""
  9.     roads = []
  10.  
  11.     def __init__(self, traffic):
  12.         self.traffic = traffic
  13.  
  14.  
  15. class StateObject:
  16.     capacity = 0
  17.     improvement = 0
  18.     repaired = 0
  19.  
  20.     def __init__(self, cap, imp):
  21.         self.capacity = cap
  22.         self.improvement = imp
  23.  
  24.  
  25. class State:
  26.     budget = 0
  27.     array = []
  28.     target = 0
  29.  
  30.     def __init__(self, budget, array=None):
  31.         if array is None:
  32.             self.array = []
  33.             self.target = 0
  34.         else:
  35.             self.array = array
  36.             for i in range(len(array)):
  37.                 self.target += array[i].improvement
  38.         self.budget = budget
  39.  
  40.     def add_object(self, obj):
  41.         self.array.append(obj)
  42.         self.target += obj.improvement
  43.  
  44.     def generate_neighbours(self):
  45.         neighbours = []
  46.         for i in range(len(self.array)):
  47.             state_obj = self.repair_road(i)
  48.             if state_obj:
  49.                 neighbours.append(state_obj)
  50.         return neighbours
  51.  
  52.     def repair_road(self, i):
  53.         a = self.array[i].capacity
  54.         b = self.array[i].improvement
  55.         if b > 0:
  56.             arr = copy.deepcopy(self.array)
  57.             arr[i] = StateObject(a + 1, b - 1)
  58.             cost = calculate_cost(a, a + 1)[0]
  59.             if self.budget - cost > 0:
  60.                 return State(self.budget-cost, arr)
  61.             return None
  62.  
  63.     def print(self):
  64.         print("Budzet: " + str(self.budget))
  65.         print("F-cja celu: " + str(self.target))
  66.         for i in self.array:
  67.             print("<" + str(i.capacity) + ", " + str(i.improvement) + ">")
  68.  
  69.  
  70. def add_road(graph, node_a, node_b, capacity):
  71.     graph[node_a].roads.append((node_b, capacity))
  72.     graph[node_b].roads.append((node_a, capacity))
  73.  
  74.  
  75. def read_input():
  76.     graph = []
  77.     budget = int(input("Budzet: "))
  78.     start_state = State(budget)
  79.     nodes = int(input("Liczba miast: "))
  80.     roads = int(input("Liczba drog: "))
  81.     for i in range(nodes):
  82.         graph.append(Node(int(input("Podaj ruch z/do miasta " + str(i) + ": "))))
  83.     for i in range(roads):
  84.         a = int(input("droga z: "))
  85.         b = int(input("do: "))
  86.         c = int(input("przepustowosc: "))
  87.         add_road(graph, a, b, c)
  88.         start_state.add_object(StateObject(c, max(min(graph[a].traffic, graph[b].traffic)-c, 0)))
  89.     return graph, budget, nodes, roads, start_state
  90.  
  91.  
  92. def calculate_cost(a, b):
  93.     return integrate.quad(lambda x: (math.atan(x-10)+math.pi/2)*40, a, b)
  94.  
  95.  
  96. def dfs(state):
  97.     for i in range(len(state.array)):
  98.         while True:
  99.             state2 = state.repair_road(i)
  100.             if state2 is None:
  101.                 break
  102.             state = state2
  103.     return state
  104.  
  105.  
  106. def vns(state):
  107.     pass
  108.  
  109.  
  110. def main():
  111.     graph, budget, nodes, roads, start_state = read_input()
  112.     print("Stan startowy")
  113.     start_state.print()
  114.     start_state_copy = copy.deepcopy(start_state)
  115.     print("Stan koncowy dfs (naiwne polepszanie kolejnych drog)")
  116.     dfs(start_state_copy).print()
  117.     #print("Stan koncowy vns")
  118.     #vns(start_state).print()
  119.  
  120.  
  121. if __name__ == "__main__":
  122.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement