首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python3.5中运行PyGMO

在Python3.5中运行PyGMO
EN

Stack Overflow用户
提问于 2015-12-13 15:39:41
回答 1查看 1.4K关注 0票数 1

我不知道我是不是来对地方了,但我现在正在尝试在64位Windows上运行一个需要PyGMO的程序,Python3.5.1。

我下载了1.1.7的msi版本(下载的here),运行安装程序,并尝试运行该程序,此错误如下:

代码语言:javascript
复制
Traceback (most recent call last):
  File "Desktop\test-1.py", line 4, in <module>
from PyGMO import *
  File "C:\Users\ycl\Anaconda3\lib\site-packages\PyGMO\__init__.py", line 57, in <module>
from PyGMO import core, algorithm, migration, problem, topology, test, util
  File "C:\Users\ycl\Anaconda3\lib\site-packages\PyGMO\core\__init__.py", line 2, in <module>
from PyGMO.core._core import *
ImportError: DLL load failed: The specified module could not be found.

该程序是一个脚本,如下所示:

代码语言:javascript
复制
import matplotlib.pyplot as plt
from matplotlib import animation
import numpy as np
from PyGMO import *
edge_weights = np.loadtxt("ir33_weight_matrix.txt", delimiter=',')
print(edge_weights[0])
areas = np.loadtxt("ir33_areas.txt", delimiter=',')
print(areas)
N = len(areas)
node_weights = [int(round(10000*areas[i])) for i in range(N)]
capacity = 1000
prob = problem.tsp(edge_weights, node_weights, capacity, type = 'cities')
pop = population(prob, 100)
steps = 3000
stepsize = 100
algo = algorithm.inverover(gen=stepsize,ri=0.05,type="random")
c = []
g = []
prev_f = 0
for i in range(steps):
    pop = algo.evolve(pop)
    f = pop.champion.f[0]
    if prev_f != f:
        c.append(pop.champion.x)
        g.append((i+1)*stepsize)
        prev_f = f
f, _, id1, id2 = prob.find_city_subsequence(pop.champion.x)
f = f*0.0001
if id1 <= id2:
    visited_cities = c[-1][id1:(id2 + 1) % N]
else:
    visited_cities = c[-1][id1:] + c[-1][:id2 + 1]

print("The fitness of the of the best found tour is: %f " % f)
print("The according removal sequence is: ")
print(visited_cities)

fig = plt.figure()
ax = plt.axes(xlim=(-10,N+10), ylim=(-0.05,1))
plt.ylabel('cross section area')
plt.xlabel('debris piece index')
line1, = ax.plot([],[], marker='o',markersize=10, alpha=0.7, linestyle='', color='r')
line2, = ax.plot([],[], marker='o',markersize=6, alpha=0.4, linestyle='', color='b')
generations_text = ax.text(0.05, 0.95, '', transform=ax.transAxes)
fitness_text = ax.text(0.40, 0.95, '', transform=ax.transAxes)
length_text = ax.text(0.75, 0.95, '', transform=ax.transAxes)

def init():
    line1.set_data([], [])
    line2.set_data([], [])
    generations_text.set_text('')
    fitness_text.set_text('')
    length_text.set_text('')
    return line1, line2, generations_text, fitness_text, length_text

def animate(ll):
    f, _, id1, id2 = prob.find_city_subsequence(c[ll])
    f = 0.0001*f
    if id1 <= (id2 +1) % N:
        visited_cities = c[ll][id1:(id2 + 1)]
    else:
        visited_cities = c[ll][id1:] + c[ll][:(id2 + 1) % N]

    area_visited = [areas[i] for i in visited_cities]
    not_visited_cities = [i for i in range(N) if i not in visited_cities]
    area_not_visited = [areas[i] for i in not_visited_cities]

    line1.set_data(visited_cities, area_visited)
    line2.set_data(not_visited_cities, area_not_visited)
    generations_text.set_text('generations = %d' % g[ll])
    fitness_text.set_text('fitness = %.4f' % f)
    length_text.set_text('tour length = %d' % len(visited_cities))
    return line1, line2, generations_text, fitness_text, length_text

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=len(g), interval=150, blit=True, repeat=False)
plt.show()

有没有人有这方面的经验?

我根本不知道在哪里可以找到DLL...

EN

回答 1

Stack Overflow用户

发布于 2017-12-19 00:46:54

您的问题可能是由python版本造成的,与msi期望的版本不匹配。

无论如何,新的pagmo (https://github.com/esa/pagmo2)通过pipconda为大多数python版本和osx提供了二进制文件(最后一个是建议的选择,因为它避免了使用boost::python的多个包之间的库不兼容) conda install pygmo或,pip install pygmo现在应该可以解决您的问题。请注意,新的pagmo语法已更改,请参阅文档以获取更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34248989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档