Skip to content
Snippets Groups Projects
Commit d6311963 authored by Lars Wiebach's avatar Lars Wiebach
Browse files

Pso updated, Lib updated, main updated

parent 984f8fe4
No related branches found
No related tags found
No related merge requests found
...@@ -18,14 +18,14 @@ def getDistance(lat1,lon1,lat2,lon2): ...@@ -18,14 +18,14 @@ def getDistance(lat1,lon1,lat2,lon2):
dy = 111.3*(lat1-lat2) dy = 111.3*(lat1-lat2)
return math.sqrt(dx*dx+dy*dy) return math.sqrt(dx*dx+dy*dy)
def costFunction(sample,permutation): def cost_function(sample,permutation):
cost = 0 cost = 0
for i in range(0, len(permutation)-1): for i in range(0, len(permutation)-1):
lat1 = sample['Breitengrad_DEC'][sample.index[permutation[i]]] lat1 = sample[permutation[i]][1]
lon1 = sample['Laengengrad_DEC'][sample.index[permutation[i]]] lon1 = sample[permutation[i]][2]
lat2 = sample['Breitengrad_DEC'][sample.index[permutation[i+1]]] lat2 = sample[permutation[i+1]][1]
lon2 = sample['Laengengrad_DEC'][sample.index[permutation[i+1]]] lon2 = sample[permutation[i+1]][2]
cost += getDistance(lat1,lon1,lat2,lon2) cost += math.ceil(getDistance(lat1,lon1,lat2,lon2))
return cost return cost
def swap(liste, x, y): def swap(liste, x, y):
...@@ -38,16 +38,16 @@ def swap(liste, x, y): ...@@ -38,16 +38,16 @@ def swap(liste, x, y):
continue continue
return liste return liste
def add_pos_geschw(p1,v): def add_pos_vel(p1,v):
p2=p1 p2=p1
for i in v: for i in v:
p2 = swap(p2,i[0],i[1]) p2 = swap(p2,i[0],i[1])
return p2 return p2
def add_geschw(v1,v2): def add_vel(v1,v2):
return v1+v2 return v1+v2
def sub_position(p1,p2): def sub_pos(p1,p2):
v =list() v =list()
temp1=0 temp1=0
temp2=0 temp2=0
...@@ -59,9 +59,8 @@ def sub_position(p1,p2): ...@@ -59,9 +59,8 @@ def sub_position(p1,p2):
v.append((temp1,temp2)) v.append((temp1,temp2))
return v return v
def multipl_koeff_geschw(c,v): def multipl_coeff_vel(c,v):
newLen = int(np.floor(c*len(v))) newLen = int(np.floor(c*len(v)))
v2 = v[:newLen] v2 = v[:newLen]
return v2 return v2
\ No newline at end of file
import numpy as np
class Particle(): class Particle():
pass
\ No newline at end of file def __init__(self,n):
range_array= list(np.arange(0,n))
np.random.shuffle(range_array)
range_array.append(range_array[0])
self.position = range_array
self.cost = float('inf')
self.local_attractor = self.position
self.local_attractor_cost = float('inf')
self.velocity = list()
def print_particle(self,i):
print("Particle Nr.: ", i )
print("Tour: ", self.position, "Kosten: ", self.cost)
\ No newline at end of file
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 9 11:00:23 2021
@author: larsw
"""
import Particle as part
import PSO_Lib as pl
import random
import pandas as pd
def pso (n, pop, sample, c1=1/3, c2=1/3, c3=1/3, abort = 50):
test_array= list()
global_attractor = list()
global_attractor_cost = float('inf')
##### Initialize #####
population = list()
# create pop-many particle
for i in range(pop):
new_particle = part.Particle(n)
population.append(new_particle)
for p in population:
p.local_attractor=p.position
p.local_attractor_cost = pl.cost_function(sample,p.local_attractor)
if(p.local_attractor_cost < global_attractor_cost):
global_attractor = p.position
global_attractor_cost = p.local_attractor_cost
# Main-Loop
for i in range(abort):
# Calculate new velocity and position for each particle
for p in population:
p.velocity = pl.add_vel(
pl.multipl_coeff_vel(c1,p.velocity),
pl.add_vel(
pl.multipl_coeff_vel(
c2,pl.sub_pos(p.local_attractor,p.position)),
pl.multipl_coeff_vel(
c3,pl.sub_pos(global_attractor,p.position))
))
p.position = pl.add_pos_vel(p.position,p.velocity)
p.cost = pl.cost_function(sample,p.position)
if(p.cost<p.local_attractor_cost):
p.local_attractor=p.position
p.local_attractor_cost=p.cost
if(p.cost<global_attractor_cost):
global_attractor=p.position
global_attractor_cost = p.cost
print(global_attractor)
return test_array
File added
File added
File added
File added
File added
main.py 0 → 100644
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 9 11:11:44 2021
@author: larsw
"""
import Particle as part
import PSO_Lib as pl
import PsoLars as pso
import pandas as pd
df = pd.read_excel('Koordinaten.xlsx')
# Random trip
#sample = df.sample(5)
#pso.pso(n=5,pop =10,sample=sample)
# Route : Berlin, Braunschweig, Dresden, Bonn, Konstanz, Nürnberg, Hamburg
staedte_liste = ['Berlin', 'Braunschweig', 'Dresden', 'Bonn', 'Konstanz', 'Nürnberg', 'Hamburg']
df_set = pd.DataFrame(columns=df.columns)
samp = df.sample(100)
for i in staedte_liste:
df_set=df_set.append(df.loc[df['Staedte']==i])
b = df_set.drop(['Unnamed: 0', 'Breitengrad', 'Laengengrad'], axis=1)
a = b.values.tolist()
print(a)
pso.pso(len(a),40,sample=a,abort = 50)
\ No newline at end of file
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment