首页 > 编程语言 >python磷虾群算法

python磷虾群算法

时间:2023-01-14 22:56:40浏览次数:41  
标签:plt python self random pos pop shrimp 算法 磷虾

首先设定初始随机种群数目,然后让虾群自动繁殖,最后就可以得出虾群的最终种群数目。例如设定初始的种群数目为20,最终在繁殖后得到的种群数目为35。

import random

class Shrimp():
    
    def __init__(self, pos, mapSize):
        # The position of the shrimp as x & y values stored in a list
        # 虾的位置作为存储在列表中的 x 和 y 值
        self.pos = pos
        self.mapSize = mapSize
    
    def stepChange(self):
        self.pos[0] += random.randint(-10, 10)
        self.pos[1] += random.randint(-10, 10)

        # If the shrimp moved off the map, move it back on
        # 如果虾移出地图,将其移回地图
        if self.pos[0] < 0:
            self.pos[0] = 0
        elif self.pos[0] >= self.mapSize[0]:
            self.pos[0] = self.mapSize[0]
        
        if self.pos[1] < 0:
            self.pos[1] = 0
        elif self.pos[1] >= self.mapSize[1]:
            self.pos[1] = self.mapSize[1]
import random
import matplotlib.pyplot as plt
from shrimp import Shrimp
import sys
para_list = sys.argv

XMAX = 1000
YMAX = 500
    
def main():
    try:
        numOfShrimp = int(para_list[1])
        display = para_list[2]
    except IndexError:
        numOfShrimp = 15  # 虾的初始种群
        display = "Y"

    shrimpList = []
    for i in range(numOfShrimp):
        randX = random.randint(0, XMAX)
        randY = random.randint(0, YMAX)
        shrimpList.append(Shrimp([randX, randY], [XMAX, YMAX]))
     
    for i in range(15):
        xvalues = []
        yvalues = []
        for shrimp in shrimpList:
            shrimp.stepChange()
            xvalues.append(shrimp.pos[0])
            yvalues.append(shrimp.pos[1])

        # 虾以8%的速度繁殖
        for i in range(int(numOfShrimp * 0.08)):
            randX = random.randint(0, XMAX)
            randY = random.randint(0, YMAX)
            shrimpList.append(Shrimp([randX, randY], [XMAX, YMAX]))
        
        # 绘制并保存图片
        plt.scatter(xvalues, yvalues)   
        plt.xlim(0,XMAX)
        plt.ylim(0,YMAX)
        plt.savefig("mygraph.png")
    
    # 若输入参数为 Y,则展示图片
    if display == "Y":
        image = plt.imread('mygraph.png')    
        plt.imshow(image)
        plt.show()

    # 将初始种群数和最终种群数保存到 shrimp_pop.csv
    print(str(numOfShrimp) + "," + str(len(shrimpList)))
    

if __name__ == "__main__":
    main()
#!/bin/bash


low_pop=$1   # 初始数目
hi_pop=$2    # 结束数目
step_pop=$3  # 间隔 

echo "Parameters are: "
echo "Population : " $low_pop $hi_pop $step_pop
outfile="shrimp_pop"$low_pop"-"$hi_pop".csv"
echo "Initial Population,Final Population" > $outfile

for p in `seq $low_pop $step_pop $hi_pop`;
do
    echo "Experiment: " $p
    # 在此处添加代码以使用相关参数调用 shrimpBase.py
    # 并将输出重定向到 outfile
    echo `python shrimpBase.py $p N` >> $outfile
done

标签:plt,python,self,random,pos,pop,shrimp,算法,磷虾
From: https://www.cnblogs.com/tiansz/p/17052733.html

相关文章

  • 算法学习笔记(8.1): 网络最大流算法 EK, Dinic, ISAP
    网络最大流目录网络最大流EK增广路算法DinicISAP作者有话说前置知识以及更多芝士参考下述链接网络流合集链接:网络流最大流,值得是在不超过管道(边)容量的情况下从源点......
  • 算法学习笔记(8.2): 上下界网络流
    上下界网络流目录上下界网络流无源汇可行流有源汇上下界可行流有源汇上下界最大流有源汇上下界最小流作者有话说前置知识以及更多芝士参考下述链接网络流合集链接:网络......
  • 基于CEM算法的三维人脸模型贴图matlab仿真
    1.算法描述采用三维人脸贴图算法conformalenergyminimization,将二维图片贴到三维人脸模型中。2.仿真效果预览matlab2022a仿真结果如下:3.MATLAB部分代码预览clear;c......
  • 基于CEM算法的三维人脸模型贴图matlab仿真
    1.算法描述采用三维人脸贴图算法conformalenergyminimization,将二维图片贴到三维人脸模型中。 2.仿真效果预览matlab2022a仿真结果如下: 3.MATLAB部分代码预览......
  • python教程6--自定义函数,数据类型转换,解方程
    本文主要讲解点如下:简单函数数据类型转换空函数自定义绝对值函数自定义函数检查参数类型函数返回多个值求解ax2+bx+c=0的根具体代码如下:'函数相关'__author__='mo......
  • python模块之beautifulsoup —— html文件解析以及提取
    python模块之beautifulsoup——html文件解析以及提取beautifulsoup简称bs4,能够帮助我们处理html等超标记文本的标签,提取其中的文字,常用于爬虫领域等。bs4及相关模块......
  • python 汉字转拼音 实例
    python汉字转拼音首先是安装第三方库:$pipinstallpinyin使用的话:>>>importpinyin>>>printpinyin.get('你好')nǐhǎo>>>printpinyin.get('你好',format="strip......
  • C++算法日记_1A
    题目链接:https://ac.nowcoder.com/acm/contest/19859/A题目来源:牛客网题目描述请统计某个给定范围[L,R]的所有整数中,数字2出现的次数。比如......
  • python批量发邮箱
    1.首先登录邮箱中开启服务2.获取到授权码后复制下来,放入如下含授权码的引号中: 1smtp_obj.login("**********@qq.com","授权码")#发送者的邮箱以及授权码(登陆邮箱......
  • Python之字典添加元素
    本文使用代码book_dict={"price":500,"bookName":"Python设计","weight":"250g"} 第一种方式:使用[]book_dict["owner"]="tyson" 说明:中括......