When I run my program it gives me this error:
new = colony.Colonia (self .__ tasks, self .__ times) UnboundLocalError: local variable 'colony' referenced before assignment
my class is the following:
import tareas
import hormiga
import colonia
class inicio:
def __init__(self):
self.__nHormigas = 20 #mAnts
self.__veces = 4 #mIter
self.__generaciones = 500 #mHillsCount
self.__alfa = 1
self.__beta = 1
self.__p = 0.1 #mEvap
self.__nTareas = 100
self.__mColonia = [] #mHills
self.__tareas = []
self.__mMejorRuta = []
def getMejorCoste(self):
return self.__mejorCoste #mBestCost
def getRuta(self):
return self.__mMejorRuta #mBestPath
def Iniciar(self):
self.__mejorCoste = float('inf')
for e in range(self.__nTareas):
tarea = tareas.Tarea()
self.__tareas.append(tarea)
for i in range(self.__generaciones):
nueva = colonia.Colonia(self.__tareas,self.__veces) #aquí es el error
self.__mColonia.append(nueva)
#en paralelo??
for colonia in self.__mColonia:
colonia.empezar()
self.__mColonia.sort(key=lambda x: x.getMejorCoste())
if (self.__mColonia[0].getMejorCoste() < self.__mejorCoste):
self.__mejorCoste = self.__mColonia[0].getMejorCoste()
self.__mMejorRuta = []
for tarea in self.__mColonia[0].getMejorRuta():
self.__mMejorRuta.append(tarea)
print(self.__mejorCoste)
My file directory contains one called colonia.py whose constructor is the following:
class Colonia:
def __init__ (self, tareas, n_iteraciones, evaporacion=0.1, n_hormigas=20):
self.__constanteEvaporacion = evaporacion
self.__nHormigas = n_hormigas
self.__iteraciones = n_iteraciones
self.__evaporacion = 1.0 - evaporacion
self.__tareas = tareas
self.__mejorCoste = float('inf')
self.__mejorRuta = list()
self.__hormigas = []
#inicializamos matriz de feromonas
self.__mFeromonas = [[getValorInicialFeromona()]*len(self.__tareas) for x in range(len(self.__tareas))]
self.__feromonas = [[0.0]*len(self.__tareas) for x in range(len(self.__tareas))]
Any ideas?
Thank you.