我最初下载的anaconda是python3.9版本,见下图:
所以在使用以下命令
pip install geatpy
后,一直报错,
后来终于下载成功了geatpy2.0.0版本后,在程序中调用geatpy时又报错
分析原因,可能是出现函数awGA出现名字重复的情况,然后产生了互相调用。
根本原因是安装的geatpy2.0.0版本(截止至19.7.29)。在此版本下import geatpy会报错:
from awGA import awGA
ImportError:can not import name 'awGA' from 'awGA' (unknown location)
所以我就查阅了很多博客和资料,从geatpy官网:Geatpy 了解到安装geatpy的一般有三种:
我们此刻发现Geatpy仅支持Windows 32和64位的Python3.5, 3.6,3.7和3.8;Linux 64位的Python3.5, 3.6,3.7和3.8以及Mac OS 系统64位的Python3.5, 3.6,3.7和3.8。而我前面使用的anaconda3使用的是python3.9环境,所以这就是为什么一直只能下载geatpy2.0.0的原因(至于为什么是2.0.0我也不懂),所以我们只需要先将前面下载的2.0.0版本卸载掉,然后在anaconda3中再建立一个新的python3环境即可。
首先卸载geatpy,换一个版本安装:
#卸载geatpy
pip uninstall geatpy
然后使用anaconda3配置python3.6环境安装geatpy
1.配置python3.6环境
因为我的pych使用的python3.7,但是pyltp只能是python3.6,所以我们先来配置环境。其实非常简单,相信大家应该都已经安装好了anaconda,我们只要再anaconda上面新配置一个环境就好了,不用看网上一些乱七八糟的教程。
输入如下,建立一个新的环境:
conda create --name python36 python=3.6
这里,输入y,继续。
这样一个python3.6的环境就配好了,我们来激活这个环境,输入如下:
activate python36
python3.6安装成功,接下来我们开始安装geatpy
安装geatpy
我们在刚刚激活的python36环境里面,通过cd命令找到下载的位置所在的文件夹,找到所在的文件夹就行,分别输入:
activate python36
到达这个文件夹之后,我们就可以安装了,只需要输入一句话就可以了:
pip install geatpy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
一般直接下载太慢,这里有一个小技巧,换一个国内的豆瓣源速度会快很多:
pip install 包名 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
这里自动匹配安装了geatpy1.1.5(至于为什么是此版本可能与python3.6版本有关,但不影响最后结果)。
使用pycharm进行geatpy测验
首先一定要选择我们刚刚建好的环境python36,否则环境就是anaconda3自带的python3.9,调用geatpy就会报错,设置方法如下:
我们点击圈中的“设置”那里,如下所示,点击“Add”
在这个界面,点击“Existing Enviroment”,点击OK
现在我们回到刚刚的界面,已经安装成功了,接下来我们来测试一下!
测试一下geatpy
输入如下代码:
# 主函数文件:main.py
import numpy as np
import geatpy as ga
# 导入目标函数
AIM_M = __import__('aimfuc')
# 变量设置
x1 = [-3, 12.1] # 自变量1的范围
x2 = [4.1, 5.8] # 自变量2的范围
b1 = [1, 1] # 自变量1是否包含下界
b2 = [1, 1] # 自变量2是否包含上界
codes = [0, 0] # 自变量的编码方式,0表示采用标准二进制编码
precisions = [4, 4] # 在二进制/格雷码编码中代表自变量的编码精度,当控制变量是二进制/格雷编码时,该参数可控制编码的精度
scales = [0, 0] # 是否采用对数刻度
ranges = np.vstack([x1, x2]).T # 生成自变量的范围矩阵
borders = np.vstack([b1, b2]).T # 生成自变量的边界矩阵
# 生成区域描述器
FieldD = ga.crtfld(ranges, borders, precisions, codes, scales)
# 调用编程模板
[pop_trace, var_trace, times] = ga.sga_new_code_templet(
AIM_M, 'aimfuc', None, None, FieldD, problem='R', maxormin=-1,
MAXGEN=1000, NIND=100, SUBPOP=1, GGAP=0.8, selectStyle='sus',
recombinStyle='xovdp', recopt=None, pm=None, distribute=True,
drawing=0)
# 最优的目标函数值为:316.946
# 最优的控制变量值为:
# 12.1
# 5.8
# 有效进化代数:1000
# 最优的一代是第 31 代
# 时间已过 1.681 秒
# 目标函数文件:aimfuc.py
# 在使用时,请将文件名修改为 aimfuc.py,和main.py放在同一目录下
import numpy as np
def aimfuc(Phen, LegV):
# 目标函数
x = Phen[:, [0]]
y = Phen[:, [1]]
f = np.sin(x + y) + (x + y) ** 2 - 1.5 * x + 2.5 * y + 1
return [f, LegV]
运行成功,结果如下:
另外,对于Anaconda库的安装方式,我这里需要说明一下。
对于anaconda3自带的python3.9环境,如果需要安装库的话,需要打开“cmd”窗口(快捷键win+R,然后输入“cmd”),将当前目录定位到anaconda的目录,记住要定位到其中的Scripts目录中,我的目录是“D:\ProgramData\anaconda3\Scripts”,所以我定位到了这个文件位置(D:\ProgramData\anaconda3\Scripts)。如下图:
而对于我们前面在anaconda3中新建的python36(只是名字叫python36,实际为python3.6),如果要在此环境中下载库(包),我习惯用的主要有如下两种方法:
1.将当前目录定位到anaconda3中新建的环境python36的目录,记住要定位到其中的Scripts目录中,我的目录是“D:\ProgramData\anaconda3\envs\python36\Scripts”,所以我定位到了这个文件位置(D:\ProgramData\anaconda3\envs\python36\Scripts)
然后输入命令下载即可:
pip install 包名 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
我们看到 在python interpreter中已经下载到了scikit-opt,在此环境下下载成功。
2.打开anadconda prompt,输入:
activate python36
激活python36环境。
然后输入安装命令:
pip install 包名 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
我们看到也已经安装成功。
另外,如何使用anaconda安装或更新自己想要的库也有一些注意事项,可见此文:
https://blog.csdn.net/xiexu911/article/details/80282440
最后,写这篇博客太辛苦了,刚才明明已经写完了,复制一个东西撤回后消失了一大半内容,导致我又写了一个多小时,太不容易了,呜呜呜。