sopt:一个简单的python最优化库

article/2025/9/9 8:00:06
                                 sopt:一个简单的python最优化库

引言

    最近有些朋友总来问我有关遗传算法的东西,我是在大学搞数学建模的时候接触过一些最优化和进化算法方面的东西,以前也写过几篇博客记录过,比如遗传算法的C语言实现(一):以非线性函数求极值为例和C语言实现粒子群算法(PSO)一等,如果对原理有兴趣的话可以去我的博客具体查看:Lyrichu's Blog。所以突发奇想,干脆把以前写的一些进化算法比如遗传算法(GA),粒子群算法(PSO),模拟退火算法(SA)以及最近看的基于梯度的一些优化算法比如Gradient Descent,SGD,Momentum等整理一下,写成一个python库,方便那些有需要的朋友使用。断断续续花了几天的时间,初步完成了一些基本功能,这里简单介绍一下。

sopt 简介


     sopt是simple optimization的简称,目前我已经将代码托管到pypi,地址是 sopt,可以直接通过pip命令下载安装使用,由于项目只依赖numpy,所以在windows和linux环境下安装都很方便,直接 pip install sopt即可。项目的github地址是 sopt。目前sopt包含的优化方法如下:

  • 遗传算法(Genetic Algorithm,GA)
  • 粒子群算法(Particle Swarm Optimization,PSO)
  • 模拟退火算法(Simulated Anealing,SA)
  • 随机游走算法(Random Walk):
  • 梯度下降法(Gradient Descent,GD)
  • 动量优化算法(Momentum)
  • 自适应梯度算法(AdaGrad)
  • RMSProp
  • Adam
    由于只是一个初步的版本,后续如果有时间的话,会加上更多的优化算法进去。目前所有的优化算法暂时只支持连续实函数的优化;除了基于梯度的几个优化算法,GA、PSO、SA以及Random Walk都同时支持无约束优化线性约束优化以及非线性约束优化。具体我会在下面详细说明。

    sopt 使用详解以及实例演示


    1.SGA 使用


        SGA是Simple Genetic Algorithm的简称,是最基本的遗传算法。其编码方式采用二进制编码,选择方法采用轮盘赌法,交叉方法采用单点交叉,变异方式采用均匀变异,默认是求函数的最小值。下面是sopt中SGA的一个简单使用实例:

    from sopt.SGA import SGA
    from math import sin
    def func1(x):
    return (x[0]-1)**2 + (sin(x[1])-0.5)**4 + 2
    if __name__ == '__main__':
    sga = SGA.SGA(func = func1,func_type = 'min',variables_num = 2,lower_bound = 0,upper_bound = 2,generations = 20,binary_code_length = 10)
    # run SGA
    sga.run()
    # show the SGA optimization result in figure
    sga.save_plot()
    # print the result
    sga.show_result()

    运行结果如下:

    -------------------- SGA config is: --------------------
    lower_bound:[0, 0]
    generations:20
    cross_rate:0.7
    variables_num:2
    mutation_rate:0.1
    func_type:min
    upper_bound:[2, 2]
    population_size:100
    func:<function func1 at 0x7f3d2311b158>
    binary_code_length:10
    -------------------- SGA caculation result is: --------------------
    global best generation index/total generations:3/20
    global best point:[1.00488759 0.45356794]
    global best target:2.00003849823336
    用图像展示为图1所示:
    o_1cfk6qi2e1vok1vpvpf7jir1fvra.png-w.jpg
    图1 SGA 运行结果
    上面定义的目标函数为f(x1,x2)=(x1−1)2+(sin(x2)−0.5)4+2,其复杂约束函数应该这样定义:
    def func1(x):
    x1 = x[0]
    x2 = x[1]
    return x1**2 + x2**2 - 3
  • complex_constraints_method:复杂约束求解的方法,默认是penalty即惩罚函数法,暂时不支持其他的求解方式;
  • complex_constraints_C:采用penalty求解复杂约束的系数


http://chatgpt.dhexx.cn/article/6ub1YbqK.shtml

相关文章

python古诗词生成_Python一日一练02----诗词生成器

要求 编写一段程序&#xff0c;可以自动生成小诗。 格式如下 源码 import random import sys articles ["the", "a", "another", "her", "his"] subjects ["cat", "dog", "horse", "m…

LSTM古诗词生成

Le LSTM古诗词生成 一、简介 基于LSTM的古诗词生成&#xff0c;设计神经网络模型&#xff0c;使模型学习数据是6291首古诗&#xff0c;没有专门的验证数据和测试数据&#xff0c;感觉不会预测正确。边学习边生成古诗&#xff0c;从生成的古诗来看学习的效果。 涉及到的模块有Py…

宋词自动生成

利用宋词语料库&#xff0c;通过单双词的组合与模板的匹配&#xff0c;实现指定词牌宋词的生成 import random import tkinter as tk import re from tkinter import messageboxlist []class Window:# 界面设计def __init__(self, root):label1 tk.Label(root, text输入词牌…

基于Python的宋词生成器

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85631523 1. 背景 我有两个爱好&#xff0c;一个是传统文化&#xff0c;另一个是高新技术。 传统文化&#xff0c;我喜欢唐诗宋词、笔墨丹青&#xff0c;高新技术我则从事前沿的IT编程&#xff0c;喜…

基于java的古诗词生成管理系统

10161-古诗词生成管理系统 开发工具 eclipse tomact mysql jdk 功能详情&#xff1a; 古诗搜索、古诗问答、机器回复、古诗管理&#xff08;添加古诗、古诗分类、古诗标签、古诗列表&#xff09;、用户管理

田字格字帖生成器、孩子取名系列工具

大家好&#xff0c;我是小寻&#xff0c;欢迎关注公众号:工具优选&#xff0c;免费领取优质项目源码和常用工具&#xff0c;还可以加入我的交流群! 这是是一款2013年上线的在线小工具集&#xff0c;包括了 13 款中文学习工具&#xff0c;有田字格字帖、拼音田字格、古诗词字帖…

有趣的深度学习——使用TensorFlow 2.0 + RNN 实现一个古体诗生成器

一、前言 很早之前&#xff0c;我曾经写过一个古体诗生成器&#xff08;详情可以戳TensorFlow练手项目二&#xff1a;基于循环神经网络(RNN)的古诗生成器&#xff09;&#xff0c;那个时候用的还是Python 2.7和TensorFlow 1.4。 随着框架的迭代&#xff0c;API 的变更&#x…

现在还可以一键自动生成古诗词,你知道吗?

人类在漫长的历史长河中&#xff0c;一直在探索着各种各样的美好&#xff0c;不断地追求着更高的境界。而如今&#xff0c;随着科技的不断发展&#xff0c;人工智能已经成为了我们得力的伙伴之一&#xff0c;为我们带来了更多的便利和可能性。尤其是在艺术和文化领域&#xff0…

古诗词在线起名 - 一刀工具箱

古诗词名字生成器帮助你在线生成古诗词名字&#xff0c;包含&#xff1a;诗经、楚辞、唐诗、宋词、辞赋等古风的名字&#xff0c;这些名字都非常的优美好听&#xff0c;希望你们能够喜欢这款古诗词起名工具。 代码片段 async subName() {let name_arr Object.keys(this.userN…

NLP入门 - 基于Word Embedding + LSTM的古诗生成器

一共实现三个功能&#xff1a; 1. 续写五言诗 2. 续写七言诗 3. 写五言藏头诗 之前用这个做Intro to Computer Science的期末项目折腾太久&#xff0c;不想赘述&#xff0c;内容介绍及实现方法可参考期末presentation的slides&#xff1a; https://docs.google.com/presen…

基于古诗词的名字生成器

数据集 因为数据量庞大&#xff0c;使用本地的 CSV 数据进行测试。 后续改进 CSV 文件保存到 mongodb 数据库&#xff0c;便于聚合查询。 数据分词 我们需要一个分词器将这些数据进行分词&#xff0c;用到的是 Golang 版的 jieba 库如下&#xff1a; "github.com/go-e…

基于LSTM + keras 的古诗生成器

1.语料准备&#xff1a;包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。诗人包括唐宋两朝近 1.4 万古诗人&#xff0c;和两宋时期 1.5 千古词人。数据来源于互联网。每行一首诗&#xff0c;标题在预处理的时候已经去掉了。2.模型参数配置&#xff1a;预先定义模…

唐诗生成器

使用唐诗语料库&#xff0c;经过去噪预处理、分词、生成搭配、生成主题等过程&#xff0c;生成唐诗。 csdn下载地址&#xff1a;http://download.csdn.net/detail/lijiancheng0614/9840952 github上repository地址&#xff1a;https://github.com/lijiancheng0614/poem_genera…

JQuery中的val()函数

JQuery中的val()函数相当于Javascript中的value属性&#xff0c;可以用来设置和获取元素的值。 下面用一个简单的邮箱登陆界面来举个例子&#xff1a; 在默认情况下邮箱的地址输入框和密码输入框都有相应的提示。 要求&#xff1a;当鼠标聚焦在邮箱地址输入框时&#xff0c;提…

【Python】sklearn中的cross_val_score()函数参数

sklearn 中的cross_val_score函数可以用来进行交叉验证&#xff0c;因此十分常用&#xff0c;这里介绍这个函数的参数含义。 sklearn.cross_validation.cross_val_score(estimator, X, yNone, scoringNone, cvNone, n_jobs1, verbose0, fit_paramsNone, pre_dispatch‘2*n_job…

sklearn交叉验证函数cross_val_score用法及参数解释

文章目录 一 、使用示例二、参数含义三、常见的scoring取值1.分类、回归和聚类scoring参数选择2.f1_micro和f1_macro区别3.负均方误差和均方误差 一 、使用示例 import numpy as np from sklearn.model_selection import train_test_split from sklearn import svm from sklea…

java val_Java中是否有val()函数?

慕尼黑的夜晚无繁华 很少有实际用例能够评估String作为Java代码的一个片段是必要的或可取的。也就是说&#xff0c;询问如何做到这一点实际上是XY问题&#xff1a;你实际上有一个不同的问题&#xff0c;可以用不同的方法来解决。先问问自己&#xff0c;这是怎么回事String你想要…

c语言val函数用法,函数VAL()什么意思怎么用啊?/

满意答案 Dickyshe 2013.03.22 采纳率&#xff1a;50% 等级&#xff1a;12 已帮助&#xff1a;12551人 将一个数据行变量转换成数字长整型变量如 text1.text "10" text2.text "11" text3.text text1.texttext2.text 按道理应该得到10&#xff0b;11(…

mysql中val是什么意思_val是什么函数

val是将由数字符号组成的字符型数据转换成相应的数值型数据的函数&#xff0c;其语法是“Val(S,V,Code)”&#xff0c;若字符串内出现非数字字符&#xff0c;那么只转换非数字字符前面的部分&#xff1b;若字符串的首字符不是数字符号&#xff0c;则返回数值零&#xff0c;但忽…