gaetpy库模板sga_permut_templet简单应用

sga_new_permut_temple
改进的单目标编程模板(排列编码)。
排列编码即每条染色体的基因都是无重复正整数的编码方式。

为什么使用排列编码

二进制编码和实数编码等传统方法在个体间交叉、变异操作中存在通道数目发生改变的局限性。

问题

max=2*x1+3*x2;
x1+2*x2<=8;
4*x1<=16;
4*x2<=12;

代码(aimfuc)

import numpy as np

def aimfuc(Phen, LegV):
	x1 = Phen[:, [0]]
	x2 = Phen[:, [1]]
	f = 2 * x1 + 3 * x2
	# 约束条件
	idx1 = np.where(x1 + 2 * x2 > 8)[0]
	idx2 = np.where(4*x1 > 16)[0]
	idx3 = np.where(4*x2 > 12)[0]
	exIdx = np.unique(np.hstack([idx1, idx2, idx3]))  # 得到非可行解在种群中的下标
	LegV[exIdx] = 0  # 对非可行解作出标记,使其在可行性列向量中对应的值为0
	return [f, LegV]

代码(main)

import geatpy as ga

# 获取函数接口地址
AIM_M = __import__('aimfuc')
# 参数设置
NVAR = 5  # 排列编码的染色体长度
VarLen = 5  # 排列集合的大小,等于5表示排列集合为{1,2,3,4,5}
# 调用编程模板,其中recombinStyle要设置为'xovpm',对于排列编码问题,必须采用xovpm(部分匹配交叉)的重组方式
[pop_trace, var_trace, times] = ga.sga_permut_templet(AIM_M, 'aimfuc', None, None, NVAR, VarLen, maxormin=-1,
                                                          MAXGEN=50, NIND=50, SUBPOP=1, GGAP=0.9, selectStyle='etour',
                                                          recombinStyle='xovpm', recopt=0.9, pm=0.1, distribute=True,
                                                          drawing=1)

结果

最优的目标函数值为:14.0
最优的控制变量值为:
4.0
2.0
5.0
1.0
3.0
有效进化代数:50
最优的一代是第 1 代
时间已过 1.1906023025512695 秒

1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值