PyPI 包包含进化算法的对立学习算子和种群初始化器
项目描述
反对学习算子和种群初始化器
OPP定位学习OP erators和POP ulation INIT ializers 是 Python 包,其中包含进化算法的对立学习算子和种群初始化器。
安装
pip install OppOpPopInit
或者
pip3 install OppOpPopInit
关于反对派运营商
在几种进化算法中,创建与当前人口的某些部分相反的对面以更好地探索搜索空间可能很有用。通常它用于搜索过程的乞求(第一次种群初始化)和每隔几代以递减的概率F
。此外,最好从人群中创造出更糟糕的物体的对立面。有关更多信息,请参阅本文。
这个包提供了几个用于创建反对派的算子(反对派算子)和使用不同分布函数和反对派算子为每个维度创建起始人口的方法!
进口
你可以从这个包中导入什么:
from OppOpPopInit import OppositionOperators # available opposition operators as static class
from OppOpPopInit import SampleInitializers # available population initializers as static class
# main function which creates random population
# using initializers and oppositors
from OppOpPopInit import init_population
还有一个用于绘制图片的小模块,如下所示
import OppOpPopInit.plotting
接口协议
边框
在数学优化任务的整个部分中,可能解决方案的最佳皮肤是使用变量的一维向量(x1, x2, ..., xn)
,其中每个变量x
都可以来自某个区域[xmin, xmax]
。genericalgorithm2 包和这个包都针对这种情况。
因此,这里的许多函数都接受参数minimums
,maximums
这意味着每个使用维度的可用区域的下限和上限(边界)。minimums
并且maximums
应该是整数或实数序列或只有一个数字,但它们不能都是数字,如果它们都是序列,它们必须具有相同的长度。
创作者和反对者的格式
创建者是创建随机样本的函数(取决于边界)。在代码中,创建者可以是任何可以调用的对象,例如带有签名() -> np.ndarray
( Callable[[], np.ndarray]
) 的函数。
反对者是获取np.ndarray
样本并将其相反形式返回为np.ndarray
. 因此,如果对象可以像(np.ndarray) -> np.ndarray
( Callable[[np.ndarray], np.ndarray]
) 一样调用,则在代码中是一个反对者。
可用的反对派运营商
清单
* OppositionOperators.Continual.abs
* OppositionOperators.Continual.modular
* OppositionOperators.Continual.quasi
* OppositionOperators.Continual.quasi_reflect
* OppositionOperators.Continual.over
* OppositionOperators.Continual.Partial
-- 用于对搜索区域的每个子集使用多个反对运算符。* OppositionOperators.Discrete.integers_by_order
-- 类似于abs
运算符,但用于整数值
* OppositionOperators.CombinedOppositor
-- 用于对具有连续或混合任务的每个维度使用现有的对立运算符。请参阅下面的示例
你可以使用模式创建自己的反对者:
def oppositor(sample: np.ndarray) -> np.ndarray:
# some code
return new_sample
还有用于非常特殊的离散任务OppositionOperators.Discrete._index_by_order
的OppositionOperators.Discrete.value_by_order
构造函数,具有可用的有效值集(如[-1, 0, 1, 5, 15]
),但强烈建议将此任务转换为索引数组任务(并使用OppositionOperators.Discrete.integers_by_order
),如下所示:
# available values
vals = np.array([1, 90. -45, 3, 0.7, 3.4, 12])
valid_array_example = np.array([1, 1, 1, 3, -45])
# function
def optimized_func(arr: np.ndarray) -> float:
#some code
return result
# recommented way for optimization algorithm
indexes = np.arange(vals.size)
def new_optimized_functio(new_arr):
arr = np.array([vals[i] for i in new_arr])
return optimized_func(arr)
# and forth u are using indexes format for your population
print(
new_optimized_functio(
np.array([0, 0, 1, 4])
)
)
例子
abs
反对者
modular
反对者
quasi
反对者
quasi_reflect
反对者
over
反对者
integers_by_order
反对者
更多示例
部分/联合反对者
如果你想对一个维度子集使用一些反对者(例如索引 0、1、3)和其他子集的其他反对者(例如索引 2、4、5) - 你需要创建Partial
或Combined
反对者。它们之间的区别在于,您需要现有的反对者与他们制作组合反对者,而您需要反对者制造者来制作部分反对者。因此,Partial
oppositor 通常更易于使用,但Combined
更灵活。
要创建Combined
反对者,请使用如下代码:
oppositor = OppositionOperators.CombinedOppositor(
[
(sequece of indexes to apply, oppositor_for_this_dimentions),
(sequece of indexes to apply, oppositor_for_this_dimentions),
...
(sequece of indexes to apply, oppositor_for_this_dimentions)
]
)
要创建Partial
反对者使用代码:
oppositor = OppositionOperators.PartialOppositor(
minimums=minimumns,
maximums=maximums,
indexes_to_opp_creator=[
(sequece of indexes to apply, oppositor_creator),
(sequece of indexes to apply, oppositor_creator)
]
)
例子:
import numpy as np
from OppOpPopInit import OppositionOperators
# 5 dim population
min_bound = np.array([-8, -3, -5.7, 0, 0])
max_bound = np.array([5, 4, 4, 9, 9])
# population points
points = np.array([
[1, 2, 3, 4, 7.5],
[1.6, -2, 3.9, 0.4, 5],
[1.1, 3.2, -3, 4, 5],
[4.1, 2, 3, -4, 0.5]
])
# saved indexes for oppositors
first_op_indexes = np.array([0, 2])
second_op_indexes = np.array([1, 3])
oppositor = OppositionOperators.CombinedOppositor(
[
(first_op_indexes, OppositionOperators.Continual.abs(
minimums=min_bound[first_op_indexes],
maximums=max_bound[first_op_indexes],
)),
(second_op_indexes, OppositionOperators.Continual.over(
minimums=min_bound[second_op_indexes],
maximums=max_bound[second_op_indexes],
))
]
)
# or
oppositor = OppositionOperators.PartialOppositor(
minimums=min_bound,
maximums=max_bound,
indexes_to_opp_creator=[
(first_op_indexes, OppositionOperators.Continual.abs),
(second_op_indexes, OppositionOperators.Continual.over)
]
)
# as u see, it's not necessary to oppose population by all dimensions, here we won't oppose by last dimension
oppositions = OppositionOperators.Reflect(points, oppositor)
print(oppositions)
# array([[-4. , 1.84589799, -4.7 , 5.04795851, 7.5 ],
# [-4.6 , -0.74399971, -5.6 , 7.49178902, 5. ],
# [-4.1 , 0.54619162, 1.3 , 6.14214043, 5. ],
# [-7.1 , -2.59648698, -4.7 , 0.95770904, 0.5 ]])
RandomPartialOppositor
该软件包最令人惊奇的功能之一是RandomPartialOppositor
. 它允许您将多个反对者应用于维度区域的随机子集,并在应用后进行一些计数后更改这些子集。这意味着您只能将一个此反对者应用于多个样本并获得结果,就像您将几个部分反对者应用于此样本的一部分一样。
RandomPartialOppositor
使用此结构创建反对者:
oppositor = OppositionOperators.RandomPartialOppositor(
[
(count_of_random_dimensions, repeate_config_during_steps, avalable_indexes, oppositor_creator),
(count_of_random_dimensions, repeate_config_during_steps, avalable_indexes, oppositor_creator),
...
(count_of_random_dimensions, repeate_config_during_steps, avalable_indexes, oppositor_creator)
],
minimums,
maximums
)
查看最简单的使用示例
反射法
用于使用OppositionOperators.Reflect(samples, oppositor)
一些反对者反对样本数组。samples
这里的参数是具有大小样本*维度的二维数组。
最佳选择的反思
有一种OppositionOperators.ReflectWithSelectionBest(population_samples, oppositor, eval_func, samples_scores = None, more_is_better = False)
方法可以反映人口(大小)并从现有对象中N
选择最佳对象。它有参数:N
2N
population_samples
: 2D numpy 数组;反映人口。oppositor
: 功能; 申请反对者。eval_func
: 功能; 人口/任务的优化功能。samples_scores
:None
/1D numpy 数组,可选;反映人口的分数(如果计算 - 没有必要再次计算)。默认值为None
.more_is_better
:逻辑的,可选的;目标——最大化功能。默认值为False
.
查看示例
人口初始化器
简单随机种群
就像oppositors operators
有一些构造函数用于创建起始人口的创建者:
SampleInitializers.RandomInteger(minimums, maximums)
-- 返回函数,它将返回和之间的随机整数minimums
向量maximums
SampleInitializers.Uniform(minimums, maximums)
-- 返回函数,它将返回均匀分布之间的随机向量minimums
和maximums
来自均匀分布的随机向量SampleInitializers.Normal(minimums, maximums, sd = None)
-- 返回函数,它将返回正态分布之间的随机向量minimums
和maximums
来自正态分布的随机向量
你可以创建你的初始化函数:
def func() -> np.ndarray:
# code
return valid_sample_array
还可以为每个维度子集SampleInitializers.Combined(minimums, maximums, indexes, creator_initializers)
生成具有不同构造函数的总体!
用于使用. creator
_k
SampleInitializers.CreateSamples(creator, k)
RandomInteger
Uniform
Normal
Mixed
反对的人群
用于init_population(total_count, creator, oppositors = None)
创建一定大小的种群,total_count
其中一些对象是由构建的,creator
而其他对象是通过将每个反对者应用oppositors
到起始对象来构建的。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
OppOpPopInit -2.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | af343d1e8d05416594ac82fc9530592687040d2226cc4fd0c59b7587015f20c9 |
|
MD5 | 7d79c5792eb818e693e27cd014fa6daa |
|
布莱克2-256 | 202bd70f453157d9a5e21694f25246156e5e760810074c2b68ad0550e9472fe9 |
OppOpPopInit -2.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 739e5756da7762b94c4ddf88767c21dca91bf31d8a708b678a615a63f6883744 |
|
MD5 | fd0a9f55abd111372d9b1b44c25cf60f |
|
布莱克2-256 | 678f15af20d18e922ae0a1ea8e1fd03db0eddea734807282fa206016baddf0fd |