小白001---第三天 遗传算法 旅行商问题(tsp)

先看一下tsp_test文件

# -*- coding: utf-8 -*-

因为python里不支持中文,注释也不得行,所以加这行代码之后源文件里有中文也可以了

import numpy as np
import geatpy as ea

导入numpy和geatpy库

class TestProblem(ea.Problem): 

继承geatpy里面的problem类

 def __init__(self, testName):

定义初始化函数

name = testName

在函数里初始化name

self.places = np.loadtxt("data/" + testName + ".csv", delimiter=",", usecols=(0, 1))

                         这一行代码调用了np.loadtxt函数去读取cvs文件,这个函数的格式为

np.loadtxt(filepath,delimiter,usecols,unpack)

                        filepath:文件的路径

                        delimiter:加载文件分隔符

                        usecols: 加载文件中列索引

                        unpack: 当加载多列数据时是否需要将数据进行解耦赋值给不同的变量

 M = 1 

初始化目标维度,就是你有几个y值需要求,这里只有一个

Dim = self.places.shape[0]

决策变量的维数,就是有几个x

maxormins = [1] * M

是求最大值还是最小值,1是最小,-1是最大,这里是求最短距离所以是1

varTypes = [0] * Dim 

决策变量的类型,0表示实数,1表示整数,这里是实数

lb = [0] * Dim  # 决策变量下界

决策变量的下界,就是x的最小值范围是从0开始

ub = [Dim - 1] * Dim

决策变量的上界

 lbin = [1] * Dim  # 决策变量下边界(0表示不包含该变量的下边界,1表示包含)
ubin = [1] * Dim  # 决策变量上边界(0表示不包含该变量的上边界,1表示包含)

决策变量上下界都包含

 ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)

调用父类problem去实例化

def aimFunc(self, pop):  # 目标函数

基本套路,初始化问题之后把目标函数放进去

x = pop.Phen.copy()  # 得到决策变量矩阵

基本套路2,得到决策变量的矩阵,pop是population的类,调用此类中的Phen函数去得到矩阵

X = np.hstack([x, x[:, [0]]]).astype(int)

hstack,水平方向上平铺,astype,转换数组类型

ObjV = []

存储所有种群个体对应的路程

 for i in range(pop.sizes):
            journey = self.places[X[i], :]  # 按既定顺序到达的地点坐标
            distance = np.sum(np.sqrt(np.sum(np.diff(journey.T) ** 2, 0)))  # 计算总路程
            ObjV.append(distance)
        pop.ObjV = np.array([ObjV]).T

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值