1. 首页
  2. 人工智能
  3. 论文/代码
  4. 基于螳螂优化算法的多种优化问题解决方案

基于螳螂优化算法的多种优化问题解决方案

上传者: 2023-03-08 03:06:33上传 PY文件 2.44KB 热度 14次

使用螳螂优化算法来寻找目标函数$f(x) = x^2$的最小值。代码如下:

import numpy as np

class Mantis:
    def __init__(self, n, func):
        self.n = n
        self.func = func
        self.pop_size = 10 * n
        self.p = np.zeros((self.pop_size, n))
        self.f = np.zeros(self.pop_size)
        self.gbest = np.zeros(n)
        self.gbest_f = np.inf

    def init_pop(self):
        self.p = np.random.uniform(-5, 5, (self.pop_size, self.n))

    def update_f(self):
        for i in range(self.pop_size):
            self.f[i] = self.func(self.p[i])

    def update_gbest(self):
        idx = np.argmin(self.f)
        if self.f[idx] < self.gbest_f:
            self.gbest = self.p[idx]
            self.gbest_f = self.f[idx]

    def prey(self):
        c = np.random.randint(self.pop_size, size=self.pop_size)
        for i in range(self.pop_size):
            if self.f[i] < self.f[c[i]]:
                self.p[i] = self.p[i] + np.random.uniform(0, 1) * (self.p[i] - self.p[c[i]])

    def evasion(self):
        for i in range(self.pop_size):
            if np.random.uniform(0, 1) < 0.1:
                self.p[i] = self.gbest + np.random.uniform(-1, 1) * np.linalg.norm(self.p[i] - self.gbest)

    def migration(self):
        for i in range(self.pop_size):
            if np.random.uniform(0, 1) < 0.1:
                j = np.random.randint(self.pop_size)
                self.p[i] = self.p[i] + np.random.uniform(0, 1) * (self.p[j] - self.p[i])

    def optimize(self):
        self.init_pop()
        for _ in range(1000):
            self.update_f()
            self.update_gbest()
            self.prey()
            self.evasion()
            self.migration()

def func(x):
    return x[0]**2

m = Mantis(1, func)
m.optimize()
print(m.gbest)

下载地址
用户评论