def Baseline(user, G, ener, KE, edgeuser): if ener == 0: return 99999, 0 else: u = user # 对应任务的user b = u.coonect # 对应任务的bs c = b.coonect # 对应任务的cloud for i in range(len(G) - 2): where = np.random.randint(0, 3) # 随机位置 0-user 1-bs 2-cloud how = np.random.choice([100, 200, 300, 400], 4) # 随机分配能量 if where == 0: # 判断在哪执行 time = u.Calculation(G.node[i + 1], how[i]) elif where == 1: time = b.Calculation(G.node[i + 1], edgeuser) + b.Transmission( G.node[i + 1], how[i] / 2) else: time = c.Calculation(G.node[i + 1]) + c.Transmission( G.node[i + 1], how[i] / 2) # 将计算时间加为边的权值 if (ener - how[i]) < ener * (1 - KE): time = Baseline(user, G, ener, KE, edgeuser) return time for j in G.neighbors(i + 1): G.add_weighted_edges_from([(i + 1, j, time)]) time = math.ceil(findmax(G, len(G) - 1)) return time
def Brute(user, H, ener, KE, edgeuser): if ener == 0: return 99999, 0 else: u = user # 对应任务的user b = u.coonect # 对应任务的bs c = b.coonect # 对应任务的cloud Min = 99999 # 最小值 brute_force = list(product(np.arange(12).tolist(), repeat=len(H) - 2)) for i in range(len(brute_force)): # 穷举所有情况 e = ener t1 = i % 12 t2 = int(i / 12) % 12 t3 = int(int(i / 12) / 12) % 12 t4 = int(int(int(i / 12) / 12) / 12) % 12 T = [t4, t3, t2, t1] for task in range(len(T)): # 穷举任务 if T[task] in range(0, 4): # 在本地处理 time = u.Calculation(H.node[task + 1], 100 * (T[task] + 1)) for j in H.neighbors(task + 1): # 将计算时间加为边的权值 H.add_weighted_edges_from([(task + 1, j, time)]) e = e - 100 * (T[task] + 1) elif T[task] in range(4, 8): time = b.Calculation( H.node[task + 1], edgeuser) + b.Transmission( H.node[task + 1], 50 * (T[task] - 3)) for j in H.neighbors(task + 1): # 将计算时间加为边的权值 H.add_weighted_edges_from([(task + 1, j, time)]) e = e - 50 * (T[task] - 3) else: time = c.Calculation(H.node[task + 1]) + c.Transmission( H.node[task + 1], 50 * (T[task] - 7)) for j in H.neighbors(task + 1): # 将计算时间加为边的权值 H.add_weighted_edges_from([(task + 1, j, time)]) e = e - 50 * (T[task] - 7) time = math.ceil(findmax(H, len(H) - 1)) if Min > time and e > ener * (1 - KE): Min = time return Min
m = gb.Model('orion') # CREATE THE VARIABLES # Power production from each unit genprod = {} for t in time: for g in unitind: genprod[t, g] = m.addVar(ub=gendata['capacity'][g], name='Power_production_at_time_{0}_of_unit_{1}_in_country_{2}'.format(t, g, gendata['region'][g])) # Load Shedding in each country loadshed = {} for t in time: for n in nodes: loadshed[t, n] = m.addVar(ub=findmax(n, t), name='Loadshed_at_time_{0}_in_country_{1}'.format(t, n)) # Flow over the lines (power actually flowing over a specific line, gives an # information about where the power is going to) flow = {} for t in time: for l in lines: flow[t, l] = m.addVar(lb=-lineinfo[l]['linecapacity'], ub=lineinfo[l]['linecapacity'], name='flow_at_time_{0}_in_line_{1}'.format(t, l)) # Sun Production solarprod = {} for t in time: for n in nodes:
# CREATE THE VARIABLES # Power production from each unit genprod = {} for t in time: for g in unitind: genprod[t, g] = m.addVar( ub=gendata["capacity"][g], name="Power_production_at_time_{0}_of_unit_{1}_in_country_{2}".format(t, g, gendata["region"][g]), ) # Load Shedding in each country loadshed = {} for t in time: for n in nodes: loadshed[t, n] = m.addVar(ub=findmax(n, t), name="Loadshed_at_time_{0}_in_country_{1}".format(t, n)) # Flow over the lines (power actually flowing over a specific line, gives an # information about where the power is going to) flow = {} for t in time: for l in lines: flow[t, l] = m.addVar( lb=-lineinfo[l]["linecapacity"], ub=lineinfo[l]["linecapacity"], name="flow_at_time_{0}_in_line_{1}".format(t, l), ) # Sun Production solarprod = {} for t in time:
import findmax print findmax.findmax("numberssmall3.txt", 2) #findmax.findmax("numbers.txt", 4)
# Power production from each unit genprod = {} for t in time: for g in unitind: genprod[t, g] = m.addVar( ub=gendata['capacity'][g], name='Power_production_at_time_{0}_of_unit_{1}_in_country_{2}'. format(t, g, gendata['region'][g])) # Load Shedding in each country loadshed = {} for t in time: for n in nodes: loadshed[t, n] = m.addVar( ub=findmax(n, t), name='Loadshed_at_time_{0}_in_country_{1}'.format(t, n)) # Flow over the lines (power actually flowing over a specific line, gives an # information about where the power is going to) flow = {} for t in time: for l in lines: flow[t, l] = m.addVar( lb=-lineinfo[l]['linecapacity'], ub=lineinfo[l]['linecapacity'], name='flow_at_time_{0}_in_line_{1}'.format(t, l)) # Sun Production solarprod = {} for t in time: