Skip to main content

PyPI package containing opposition learning operators and population initializers for evolutionary algorithms

Project description

Opposition learning operators and population initializers

PyPI version

pip install OppOpPopInit

PyPI package containing opposition learning operators and population initializers for evolutionary algorithms.

About opposition operators

In several evolutionary algorithms it can be useful to create the opposite of some part of current population to explore searching space better. Usually it uses at the begging of searching process (with first population initialization) and every few generations with decreasing probability F. Also it's better to create oppositions of worse objects from populations. See this article for more information.

This package provides several operators for creating oppositions (opposition operators) and methods for creating start population using different distribution functions and opposition operators for each dimension!

Imports

What can u import from this package:

from OppOpPopInit import OppositionOperators # available opposition operators
from OppOpPopInit import SampleInitializers # available population initializers
from OppOpPopInit import init_population # function to initialize population using pop. initializers and several oppositors

Available opposition operators

Checklist

There are several operators constructors. Main part of them should use two arguments:

  • minimums -- numpy array with minimum borders for each dimension
  • maximums -- numpy array with maximum borders for each dimension

Checklist:

  • OppositionOperators.Continual.abs
  • OppositionOperators.Continual.modular
  • OppositionOperators.Continual.quasi
  • OppositionOperators.Continual.quasi_reflect
  • OppositionOperators.Continual.over
  • OppositionOperators.Continual.Partial -- for using different opposition operators for each dimension with continual task
  • OppositionOperators.Discrete.integers_by_order -- it's like abs operator but for integer values
  • OppositionOperators.PartialOppositor -- for using different opposition operators for each dimension with continual or mixed task. See example below

U can create your own oppositor using pattern:

def oppositor(sample_as_array):
    # some code
    return new_sample_as_array

There are also OppositionOperators.Discrete.index_by_order and OppositionOperators.Discrete.value_by_order constructors for very special discrete tasks with available sets of valid values (like [-1, 0, 1, 5, 15]), but it's highly recommended to convert this task to indexes array task (and use OppositionOperators.Discrete.integers_by_order) like below:

# 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):
    #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

Examples

abs oppositor

Code

modular oppositor

Code

quasi oppositor

Code

quasi_reflect oppositor

Code

over oppositor

Code

integers_by_order oppositor

Code

More examples

Partial oppositor

Create Partial oppositor using this structure:

oppositor = OppositionOperators.PartialOppositor(
    [
        (numpy_array_of_indexes, oppositor_for_this_dimentions),
        (numpy_array_of_indexes, oppositor_for_this_dimentions),
        ...
        (numpy_array_of_indexes, oppositor_for_this_dimentions)
    ]
)

Example:

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.PartialOppositor(
    [
        (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],
        ))
    ]
)

# 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)

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       ]])

Another example code

Reflect method

Use OppositionOperators.Reflect(samples, oppositor) for oppose samples array using some oppositor. samples argument here is 2D-array with size samples*dimension.

Population initializers

Simple random populations

Like oppositors operators there are some constructors for creating start population:

  • SampleInitializers.RandomInteger(minimums, maximums) -- returns function which will return random integer vectors between minimums and maximums
  • SampleInitializers.Uniform(minimums, maximums) -- returns function which will return random vectors between minimums and maximums from uniform distribution
  • SampleInitializers.Normal(minimums, maximums, sd = None) -- returns function which will return random vectors between minimums and maximums from normal distribution

U can create your initializer function:

def func():
    # code
    return valid_sample_array 

There is also SampleInitializers.Combined(minimums, maximums, list_of_indexes, list_of_initializers_creators) for generate population with different constructors for each dimension!

Use creator for initialize population with k objects using SampleInitializers.CreateSamples(creator, k).

RandomInteger

Code

Uniform

Code

Normal

Code

Mixed

Code

Populations with oppositions

Use init_population(total_count, creator, oppositors = None) to create population of size total_count where some objects are constructed by creator and other objects are constructed by applying each oppositor from oppositors to start objects.

Code

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

OppOpPopInit-1.0.0.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

OppOpPopInit-1.0.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file OppOpPopInit-1.0.0.tar.gz.

File metadata

  • Download URL: OppOpPopInit-1.0.0.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3

File hashes

Hashes for OppOpPopInit-1.0.0.tar.gz
Algorithm Hash digest
SHA256 efc44b15316c5913fcd717dcfe5971b4e637df2512d0eb300413d9acfb704ad3
MD5 f355ebf57ae80c41852f9305bd32ea93
BLAKE2b-256 cc7f49c28bdca18ef2180ff28609521ca1d6cd17eed8271669a0b8f6c1f65107

See more details on using hashes here.

Provenance

File details

Details for the file OppOpPopInit-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: OppOpPopInit-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.3

File hashes

Hashes for OppOpPopInit-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 443d56d398147cd68d07b9e8d2b5b81eb36f628ac1a36613113058d0c3eb80c3
MD5 5ebb5db66e03c5fb7cb3c140d00cd8fa
BLAKE2b-256 d839dd2f8df83dbd28d83b24bc9bbcbb2a3b7a89cbac6ae6cbe819022a3fb245

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page