def run(self, itter): bestFitness = np.inf bestGen = [] bestCentroid = None for a in range(itter): i = 0 for ant in self.ants: ant.init() ant.run() #print(ant.tabu) if( ant.fitness<bestFitness): bestFitness= ant.fitness bestCentroid = ant.centroid print ("=========================") print ("ant number: "+str(i)) print ("fitness : " +str(ant.fitness)) i+=1 print("=====================================") print("Itteration : %s"%(a)) print("=====================================") print("bestfitness : %s"%(bestFitness)) bestGen.append(bestFitness) for i in range(len(bestGen)): print("best fitness at generation -%s : %s" %(i, bestGen[i])) clust = KMeans(self.data.data,bestCentroid, self.ansdict) clust.run(20) print("===================================================") print("====================K-Means========================") print("===================================================") print("SSE : %s"%(clust.getaccsse())) print("SSE : %s"%(clust.getacc())) print("Assigned data : %s"%(clust.assignedNum)) #print(self.pheromap) return self.pheromap
import random from dataset import Dataset from KMeans import KMeans Data = Dataset('nursery.txt') Data.run() numCen = 5 centroid = [ Data.data[random.randrange(0, len(Data.data))].copy() for i in range(numCen) ] Clust = KMeans(Data.data, centroid, 5) Clust.run(10) print(Clust.getaccsse()) print(Clust.getacc())
def Evolutionize(self): bestGeneration = [] bestCentroid = None bestFitness = np.inf for i in range(self.itter): tempBestGen = np.inf for j in range(self.populationsize): particles = [k for k in range(self.populationsize) if k != j] #not current randomparticle = [] for a in range(3): ran = random.choice(particles) randomparticle.append(ran) particles.remove(ran) a, b, c = randomparticle mutant = [] for z in range(self.centroidNum): mutant.append([]) for x in range(self.dimension): #print(len(self.population[a].centroid)) #print(len(self.population[a].centroid[z])) tempa = self.population[a].centroid[z][x] tempb = self.population[b].centroid[z][x] tempc = self.population[c].centroid[z][x] temp = tempa - self.mut * (tempb - tempc) mutant[z].append(temp) #temp = [self.population[a].centroid[z][itt] + # self.mut * (self.population[b].centroid[z][itt] # - self.population[c].centroid[z][itt]) for itt in range(len(self.population[0].centroid[z])-1)] #print (temp) #print(mutant) for a in range(len(mutant)): for b in range(len(mutant[a])): mutant[a][b] = np.clip(mutant[a][b], self.bounddown[a], self.boundup[a]) crossTruth = [ np.random.rand(self.dimension) < self.crossp for a in range(self.centroidNum) ] #print(crossTruth) trial = self.population[j].centroid.copy() for a in range(len(crossTruth)): for b in range(len(crossTruth[a])): if (crossTruth[a][b]): trial[a][b] = mutant[a][b] temp = self.population[j].getfitness(trial) print("=========================") print("particle number: " + str(j)) print("fitness trial : " + str(temp)) print("self best : " + str(self.population[j].lastfitness)) #print("%s, %s" %(self.population[j].lastfitness,tempBestGen)) #print("%s" %(self.population[j].lastfitness<tempBestGen)) if self.population[j].lastfitness < tempBestGen: #recording best fitness each generation tempBestGen = self.population[j].lastfitness if (self.population[j].lastfitness < bestFitness): bestFitness = self.population[j].lastfitness bestCentroid = self.population[j].centroid if temp < self.population[j].lastfitness: self.population[j].lastfitness = temp self.population[j].centroid = trial bestGeneration.append(tempBestGen) print("=====================================") print("Itteration : %s" % (i)) print("=====================================") print("bestfitness : %s" % (min(self.fitness))) for i in range(len(bestGeneration)): print("best fitness at generation -%s : %s" % (i, bestGeneration[i])) print("---------------------------------------------------") print("Centroid") print("---------------------------------------------------") for i in range(len(bestCentroid)): print("centroid-%s :%s" % (i, bestCentroid[i])) clust = KMeans(self.data.data, bestCentroid, self.ansdict) clust.run(self.itterkmeans) print("===================================================") print("====================K-Means========================") print("===================================================") print("SSE : %s" % (clust.getaccsse())) print("Akurasi : %s" % (clust.getacc())) print("Assigned data : %s" % (clust.assignedNum)) print("---------------------------------------------------") print("Centroid") print("---------------------------------------------------") for i in range(len(clust.centroid)): print("centroid-%s :%s" % (i, clust.centroid[i])) clust.print_Output()