这是一个与软计算和优化相关的概念性问题。我正在实现离散入侵杂草优化(DIWO)来解决旅行商问题。我们从这篇研究论文中研究:
代码的第二部分:
# for every iteration i till iter_max
sd_iter = ( ( float(pow(iter_max-i,mod_index)) / float(pow(iter_max,mod_index)) ) * (sd_i-sd_f)) + sd_f
fmax = max(population)[0] # weed with maximum fitness
fmin = min(population)[0]
print("Generation ",i, "Max Fitness =",fmax," Tour length = ",int(1/fmax))
for j in range(len(population)):
#Calculate number of seeds for a given fitness
s = no_seed(population[j][0],fmax,fmin)
for k in range(s):
cities = [] #cities stores each seed's tour
for z in range(max_city):
# getting seeds using normal distribution function
param = np.random.normal(population[j][1][z],sd_iter,None)
param = int(param)
val = param % max_city
val += 1
cities.append(val)
count = [0] * max_city #count[i] stores the number of times (i+1)'th city is repeated in 'cities'
zero_count = [] #zero_count contains cities which have not been included in 'cities' i.e. count[i+1] = 0
for v in cities:
count[v-1] += 1
for q in range(max_city):
if count[q] == 0:
zero_count.append(q+1)
#Every city is to be visited and repetitions eliminated
px = 0
for q in range(len(cities)):
if count[cities[q]-1] > 1:
count[cities[q]-1] -= 1
cities[q] = zero_count[px]
px += 1
first_city = cities[0]
cities.append(first_city)
cost = path_length(tsp,cities)
fit = fitness(cost)
seed = (fit,cities)
population.append(seed)
population.sort(reverse=True)
#competitive exclusion
population=population[0:gen_n_max]
final = population[0]
问题出在正态分布的步骤上随机.正常(…)“产生与相应杂草(亲本)相关的种子。当我们打印种子时,它们的结果远远高于最佳值。例如,我在“Berlin52.tsp”上运行它,它来自TSPLIB95数据集,该数据集在线提供,其最佳旅游成本为7542。但当打印种子时,甚至没有一颗种子的适合度接近最佳成本。你知道吗
我得到的种子价格在25000-30000之间。我知道种子基本上是杂草的排列,但至少有一颗种子不应该像九万颗那样接近7542颗吗?一万?至少。你知道吗
也许错误在于探索和开发?任何帮助或轻推的方向将非常感谢!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐