(转载)MATLAB智能算法30个案例分析(1)——遗传算法工具箱

        以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。

1理论基础

1.1遗传算法概述

        遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。
        在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。基因组成的串就是染色体,或者称为基因型个体(individuals)。一定数量的个体组成了群体(population)。群体中个体的数目称为群体大小(population size),也称为群体规模。而各个个体对环境的适应程度叫做适应度(fitness)。
遗传算法的基本步骤如下:
        1.编码
        GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点。

        2.初始群体的生成
        随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了一个群体。GA以这N个串结构数据作为初始点开始进化。
        3.适应度评估
        适应度表明个体或解的优劣性。不同的问题,适应性函数的定义方式也不同。4、选择
选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。选择体现了达尔文的适者生存原则。
        5.交叉
        交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新一代个体,新个体组合了其父辈个体的特性。交叉体现了信息交换的思想。
        6.变异
        变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。同生物界一样,GA中变异发生的概率很低,通常取值很小。

1.2谢菲尔德遗传算法工具箱

        1.工具箱简介
        谢菲尔德(Sheffield)遗传算法工具箱是英国谢菲尔德大学开发的遗传算法工具箱。该工具箱是用MATLAB高级语言编写的,对问题使用M文件编写,可以看见算法的源代码,与此匹配的是先进的MATLAB数据分析、可视化工具、特殊目的应用领域工具箱和展现给使用者具有研究遗传算法可能性的一致环境。该工具箱为遗传算法研究者和初次实验遗传算法的用户提供了广泛多样的实用函数。
        2.工具箱添加
        用户可以通过网络下载gatbx工具箱(官方github下载地址:gatbx)。然后把工具箱添加到本机的MATLAB环境中,该工具箱的安装步骤如下:
        (1)将工具箱文件夹复制到本地计算机中的工具箱目录下,路径为matlabroot\ toolbox。其中matlabroot为 MATLAB的安装根目录。
        (2)将工具箱所在的文件夹添加到MATLAB的搜索路径中,有两种方式可以实现,即命令行方式和图形用户界面方式。
        ①命令行方式:用户可以调用addpath命令来添加,例如:

str = [matlabroot, '\toolbox\gatbx'];
addpath(str)

        ②图形用户界面方式:在 MATLAB主窗口上选择主页→设置路径菜单项,单击“添加文件夹”按钮。找到工具箱所在的文件夹( gatbx),单击“OK”按钮,则工具箱所在的文件夹出现在“设置路径”的最上端。单击“保存”按钮保存搜索路径的设置,然后单击“关闭”按钮关闭对话框。

        (3)批量修改后缀

        该工具箱文件后缀为M,即*.M,matlab是区分大小写的,如果这一步没有操作,将会报错,在该文件路径下,新建txt,输入以下命令,并保存修改文件后缀为bat,点击运行:

ren *.M *.m

        如果文件夹中.M后缀的文件并未修改为.m的后缀,可以通过一个中间后缀名进行修改,先将其后缀名转为.txt,再转为.m,也就是先输入下面的命令,并保存修改文件后缀为bat,点击运行:

ren *.M *.txt

        所有.M后缀的文件都修改为了.txt后缀,然后再输入下面的命令并保存修改文件后缀为bat,点击运行:

ren *.txt *.m

        这样就把所有文件的后缀名都改成了.m文件。如果还是不行的话。。。。。就一个一个手动改吧。

2案例背景

2.1问题描述

        1.简单一元函数优化
        利用遗传算法寻找以下函数的最小值:

         2.多元函数优化
        利用遗传算法寻找以下函数的最大值:

2.2解题思路及步骤

        将自变量在给定范围内进行编码,得到种群编码,按照所选择的适应度函数并通过遗传算法中的选择,交叉和变异对个体进行筛选和进化,使适应度值大的个体被保留,小的个体被淘汰,新的群体继承了上一代的信息,又优于上一代,这样反复循环,直至满足条件,最后留下来的个体集中分布在最优解周围,筛选出其中最优的个体作为问题的解。

3 MATLAB程序实现

        下面详细介绍各部分常用的函数,其他的函数用户可以直接参考工具箱中的GATBXA2.PDF文档,其中有详细的用法介绍。

3.1 工具箱结构

        遗传算法工具箱中的主要函数如表1所列。

表1 遗传算法工具箱的主要函数列表


 

 3.2遗传算法常用函数

        1.创建种群函数——crtbp功能:创建任意离散随机种群。调用格式:

% 调用格式1
[Chrom,Lind,Basev]= crtbp(Nind,Lind)
% 调用格式2
[Chrom,Lind,Basev]= crtbp(Nind,Base)
% 调用格式3
[Chrom,Lind,Base]= crtbp(Nind,Lind,Base)

        格式①创建一个大小为Nind×Lind 的随机二进制矩阵,其中,Nind 为种群个体数,Lind为个体长度。返回种群编码Chrom和染色体基因位的基本字符向量 BaseV。
        格式②创建一个种群个体为Nind,个体的每位编码的进制数由Base 决定(Base 的列数即为个体长度)。
        格式③创建一个大小为Nind×Lind 的随机矩阵,个体的各位的进制数由Base决定﹐这时输入参数Lind可省略(Base 的列数即为Lind),即为格式②。
        【用法举例】使用函数crtbp创建任意离散随机种群的应用举例。

        (1)创建一个种群大小为5,个体长度为10的二进制随机种群:

[Chrom,Lind,BaseV] = crtbp(5,10)

或者

[Chrom,Lind,BaseV] = crtbp(5,10,[2 2 2 2 2 2 2 2 2 2])

或者

[Chrom,Lind,BaseV] = crtbp(5,[2 2 2 2 2 2 2 2 2 2])

输出结果为:

        2.适应度计算函数一—ranking功能:基于排序的适应度分配。调用格式:

% 调用格式1
Fitnv = ranking(Objv)
% 调用格式2
Eitnv = ranking(Objv,RFun)
% 调用格式3
Fitnv = ranking(Objv,RFun,SUBPOP)

        格式①是按照个体的目标值ObjV(列向量)由小到大的顺序对个体进行排序的,并返回个体适应度值FitnV的列向量。
        格式②中RFun有三种情况: .
        (1)若RFun是一个在[1,2]区间内的标量,则采用线性排序,这个标量指定选择的压差。

        (2)若RFun是一个具有两个参数的向量,则RFun(2):指定排序方法,0为线性排序,1为非线性排序。RFun(1);对线性排序﹐标量指定的选择压差RFun(1)必须在[1,2]区间;对非线性排序,RFun(1)必须在[1, length(ObjV)一2]区间;如果为NAN,则 RFun(1)假设为2。
        (3)若RFun是长度为length(ObjV)的向量,则它包含对每一行的适应度值计算。格式③中的参数ObjV和RFun与格式①和格式②一致,参数SUBPOP是一个任选参数,指明在-ObjV中子种群的数量。省略SUBPOP或SUBPOP为NAN,则 SUBPOP=1。在ObjV中的所有子种群大小必须相同。如果ranking被调用于多子种群,则ranking 独立地对每个子种群执行。
        【用法举例】考虑具有10个个体的种群,其当前目标值如下:

ObjV = [1;2;3;4;5;10;9;8;7;6]

        (1)使用线性排序和压差为⒉估算适应度:

Fitnv= ranking(ObjV)
% 或者
Fitnv= ranking(ObjV,[2,0])
% 或者
Fitnv= ranking(ObjV,[2,0],1)

        运行结果如下:

        (2〉使用RFun中的值估算适应度:

RFun = [3;5;7;10;14;18;25;30;40;50];
Fitnv = ranking(Objv, RFun)

运行结果:

        (3〉使用非线性排序,选择压差为2,在ObjV中有两个子种群估算适应度:
 

FitnV =ranking(ObjV,[2,1],2)

 运行结果:

        3.选择函数——select 功能:从种群中选个体(高级函数)。 调用格式:

selCh = select(SEL_F,Chrom,Fitnv)
selCh = select(SEL_r,Chrom,Eitnv,GGAP)
selCh = select(SRL_F,Chrom,Fitnv,GGAP,SUBPOP)

        SEL_F是一个字符串,包含一个低级选择函数名,如 rws 或 sus;

        FitnV是列向量,包舍种群 Chrom中个体的适应度值。这个适应度值表明了每个个体被 选择的预期概率。

        GGAP是可选参数,指出了代沟部分种群被复制。如果GGAP省略或为NAN,则GAP 假设为1.0。

        SUBPOP是一个可选参数,决定 Chrom 中子种群的数量。如果 SUBPOP 省略或为 NAN,则 sUBPOP=1。Chrom 中所有子种群必须有相同的大小。
        【用法举例】考虑以下具有8个个体的种群Chrom,适应度值为FitnV: 

Chrom = [1 11 21;2 12 22;3 13 23;4 14 24;5 15 25;6 16 26;7 17 27;8 18 28]
FitnV = [1.50;1.35;1.21;1.07;0.92;0.78;0.64;0.5]

使用随机遍历抽样 sus 选择8个个体

selch = select('sus',Chrom,FitnV)

运行结果为:

         4.交叉算子函数——recombin功能:重组个体(高级函数)。调用格式:

NewChrom = recombin(REC_r,Chrom)
NewChrom = recombin(REC_F,Chrom,Recopt)
NewChrom = recombin(REC_F,Chrom,RecOpt,SUBPOP)

        recombin完成种群Chrom中个体的重组,在新种群NewChrom中返回重组后的个体。Chrom和NewChrom中的一行对应一个个体。
        REC_F是一个包含低级重组函数名的字符串,例如recdis或xovsp.
        RecOpt是一个指明交叉概率的任选参数,如省略或为NAN,将设为缺省值。
        SUBPOP是一个决定Chrom中子群个数的可选参数,如果省略或为NAN,则 SUBPOP为1。Chrom中的所有子种群必须有相同的大小。
        【用法举例】使用函数recombin对5个个体的种群进行重组。

Chrom = crtbp(5,10)
NewChrom = recombin('xovsp',Chrom)

         5.变异算子函数——mut功能:离散变异算子。
        调用格式:

NewChrom = mut(O1dChrom,Pm,Basev)

OldChrom为当前种群,Pm为变异概率(省略时为0.7/Lind),BaseV指明染色体个体元素的变异的基本字符(省略时种群为二进制编码)。
        【用法举例】使用函数mut将当前种群变异为新种群。

        (1)种群为二进制编码:

oldChrom = crtbp(5,10)
NewChrom = mut(oldChrom)

         (2)种群为非二进制编码,创建一个长度为8、有6个个体的随机种群;

BaseV = [8 8 8 4 4 4 4 4];
[Chrom, Lind,BaseV] = crtbp(6,BaseV);
Chrom
NewChrom = mut(Chrom,0.7,BaseV)

         6.重插入函数———reins功能:重插入子代到种群。调用格式:

Chrom = reins(Chrom,SelCh)
Chrom = reins(Chrom,Se1Ch,SUBPOP)
Chrom = reins(Chrom,SelCh,SUBPOP, InsOpt,0bjvCh)
[Chrom,0bjVCh]= reins(Chrom,SelCh,SUBPOP,Ins0pt,0bjvCh,0bjvSel)

        reins完成插人子代到当前种群,用子代代替父代并返回结果种群。Chrom为父代种群,SelCh为子代,每一行对应一个个体。
        SUBPOP是一个可选参数,指明Chrom和 SelCh中子种群的个数。如果省略或者为NAN,则假设为1。在Chrom和SelCh中每个子种群必须具有相同大小。
        InsOpt是一个最多有两个参数的任选向量。

        InsOpt(1)是一个标量,指明用子代代替父代的方法。0为均匀选择,子代代替父代使用均匀随机选择。1为基于适应度的选择,子代代替父代中适应度最小的个体。如果省略InsOpt(1)或InsOpt(1)为NAN,则假设为0。
        InsOpt(2)是一个在[o,1]区间的标量,表示每个子种群中重插入的子代个体在整个子种群中个体的比率。如果InsOpt(2)省略或为NAN,则假设InsOpt(2)=1.0。
        ObjVCh是一个可选列向量,包括Chrom中个体的目标值。对基于适应度的重插入,ObjVCh是必需的。
        ObjVSel是一个可选参数,包含SelCh中个体的目标值。如果子代的数量大于重插入种群中的子代数量﹐则ObjVSel是必需的。这种情况子代将按它们的适应度大小选择插人。
        【用法举例】在5个个体的父代种群中插入子代种群。

Chrom = crtbp(5,10)            % 父代
selch = crtbp(2,10)            % 子代
Chrom = reins(Chrom,selch)     % 重插入

        7.实用函数——bs2rv
        功能:二进制到十进制的转换。调用格式:

Phen = bs2rv(Chrom,FieldD)

        bs2rv根据译码矩阵FieldD将二进制串矩阵Chrom 转换为实值向量,返回十进制的矩阵。
        矩阵FieldD有如下结构:

        这个矩阵的组成如下:
        len是包含在Chrom中的每个子串的长度,注意sum(len)=size(Chrom,2)。lb和ub分别是每个变量的下界和上界。
        code指明子串是怎样编码的,1为标准的二进制编码,0为格雷编码。scale指明每个子串所使用的刻度,0表示算术刻度,1表示对数刻度。
        lbin和 ubin指明表示范围中是否包含边界。0表示不包含边界,1表示包含边界。
        【用法举例】先使用crtbp创建二进制种群Chrom,表示在[一1,10]区间的一组简单变量,然后使用bs2rv将二进制串转换为实值表现型。

Chrom = crtbp(4,8)                             % 创建二进制串
FieldD = [size(Chrom,2);-1;10;1;0;1;1]         % 包含边界
Phen = bs2rv(Chrom,FieldD)                     % 转换二进制到10进制

        8.实用函数—-rep功能:矩阵复制。
        调用格式: Matout = rep(MatIn,REPN)
        函数rep完成矩阵MatIn的复制,REPN指明复制次数,返回复制后的矩阵 MatOut。REPN包含每个方向复制的次数,REPN(1)表示纵向复制次数,REPN(2)表示水平方向复制次数。
        【用法举例】使用函数rep 复制矩阵MatIn。

MatIn = [1 2 3 4;5 6 7 8]
MatOut = rep(MatIn,[1,2])

 

3.3遗传算法工具箱应用举例

        本节通过一些具体的例子来介绍遗传算法工具箱函数的使用。

1.简单一元函数优化
        利用遗传算法计算以下函数的最小值:

         选择二进制编码,遗传算法参数设置如表2所列。

表2 遗传算法参数

         遗传算法优化程序代码:

clc
clear all
close all
%% 画出函数图
figure(1);
hold on;
lb=1;ub=2; %函数自变量范围【1,2】
ezplot('sin(10*pi*X)/X',[lb,ub]);   %画出函数曲线
xlabel('自变量/X')
ylabel('函数值/Y')
%% 定义遗传算法参数
NIND=40;        %个体数目
MAXGEN=20;      %最大遗传代数
PRECI=20;       %变量的二进制位数
GGAP=0.95;      %代沟
px=0.7;         %交叉概率
pm=0.01;        %变异概率
trace=zeros(2,MAXGEN);                        %寻优结果的初始值
FieldD=[PRECI;lb;ub;1;0;1;1];                      %区域描述器
Chrom=crtbp(NIND,PRECI);                      %初始种群
%% 优化
gen=0;                                  %代计数器
X=bs2rv(Chrom,FieldD);                 %计算初始种群的十进制转换
ObjV=sin(10*pi*X)./X;        %计算目标函数值
while gen<MAXGEN
   FitnV=ranking(ObjV);                               %分配适应度值
   SelCh=select('sus',Chrom,FitnV,GGAP);              %选择
   SelCh=recombin('xovsp',SelCh,px);                  %重组
   SelCh=mut(SelCh,pm);                               %变异
   X=bs2rv(SelCh,FieldD);               %子代个体的十进制转换
   ObjVSel=sin(10*pi*X)./X;             %计算子代的目标函数值
   [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群
   X=bs2rv(Chrom,FieldD);
   gen=gen+1;                                             %代计数器增加
   %获取每代的最优解及其序号,Y为最优解,I为个体的序号
   [Y,I]=min(ObjV);
   trace(1,gen)=X(I);                            %记下每代的最优值
   trace(2,gen)=Y;                               %记下每代的最优值
end
plot(trace(1,:),trace(2,:),'bo');                            %画出每代的最优点
grid on;
plot(X,ObjV,'b*');   %画出最后一代的种群
hold off
%% 画进化图
figure(2);
plot(1:MAXGEN,trace(2,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestY=trace(2,end);
bestX=trace(1,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])

运行结果:

 

        2.多元函数优化
        利用遗传算法计算以下函数的最大值:

        选择二进制编码,遗传算法参数设置如表3所列。

表3 遗传算法参数

        遗传算法优化程序代码:

clc
clear all
close all
%% 画出函数图
figure(1);
lbx=-2;ubx=2; %函数自变量x范围【-2,2】
lby=-2;uby=2; %函数自变量y范围【-2,2】
ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50);   %画出函数曲线
hold on;
%% 定义遗传算法参数
NIND=40;        %个体数目
MAXGEN=50;      %最大遗传代数
PRECI=20;       %变量的二进制位数
GGAP=0.95;      %代沟
px=0.7;         %交叉概率
pm=0.01;        %变异概率
trace=zeros(3,MAXGEN);                        %寻优结果的初始值
FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1];                      %区域描述器
Chrom=crtbp(NIND,PRECI*2);                      %初始种群
%% 优化
gen=0;                                  %代计数器
XY=bs2rv(Chrom,FieldD);                 %计算初始种群的十进制转换
X=XY(:,1);Y=XY(:,2);
ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);        %计算目标函数值
while gen<MAXGEN
   FitnV=ranking(-ObjV);                              %分配适应度值
   SelCh=select('sus',Chrom,FitnV,GGAP);              %选择
   SelCh=recombin('xovsp',SelCh,px);                  %重组
   SelCh=mut(SelCh,pm);                               %变异
   XY=bs2rv(SelCh,FieldD);               %子代个体的十进制转换
   X=XY(:,1);Y=XY(:,2);
   ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y);             %计算子代的目标函数值
   [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群
   XY=bs2rv(Chrom,FieldD);
   gen=gen+1;                                             %代计数器增加
   %获取每代的最优解及其序号,Y为最优解,I为个体的序号
   [Y,I]=max(ObjV);
   trace(1:2,gen)=XY(I,:);                       %记下每代的最优值
   trace(3,gen)=Y;                               %记下每代的最优值
end
plot3(trace(1,:),trace(2,:),trace(3,:),'bo');                            %画出每代的最优点
grid on;
plot3(XY(:,1),XY(:,2),ObjV,'bo');  %画出最后一代的种群
hold off
%% 画进化图
figure(2);
plot(1:MAXGEN,trace(3,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestZ=trace(3,end);
bestX=trace(1,end);
bestY=trace(2,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ),'\n'])

运行结果:

 

 4.总结

        遗传算法工具箱提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖问题的具体领域,对问题的种类具有很强的鲁棒性,所以它广泛应用于各个科学领域。遗传算法在函数优化、组合优化、生产调度、自动控制﹑机器人学﹑图像处理、人工生命、遗传编码和机器学习等方面得到了广泛运用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21662.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读_语音合成_Spear-TTS

论文信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: Speak, Read and Prompt: High-Fidelity Text-to-Speech with Minimal Supervision name_ch: 说话、阅读和提示&#xff1a;少量监督实现高保真文本转语音 paper_addr: http://arxiv.org/abs/2302.0354…

windows11下系统睡眠状态被UpdateOrchestrator唤醒的解决方案

windows11下系统睡眠状态被UpdateOrchestrator唤醒的解决方案 一、问题排查二、问题解决 一、问题排查 最近win11更新后发现会偶尔在睡眠状态下唤醒&#xff0c;CMD中输入powercfg -lastwake命令可以查看唤醒源程序 这里显示唤醒是按下了电源按钮&#xff0c;符合我此次唤醒操…

验证知识点总结

1、常用总线对比 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) 高…

系统分析师(一)软考简介

目录 1.证书简介2.考试简介3.考试报名4.各地考试机构5.考试要求6.考试教程用书 考试时间&#xff1a; 每年5月的最后一个周六 1.证书简介 ​ 软考全称是计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;是由国家人力资源和社会保障部、工业和信息化部…

华丽家族股东大会21项议案全被否

5月17日晚间&#xff0c;A股上市公司华丽家族发布关于收到上海证券交易所监管工作函的公告&#xff0c;交易所对相关事项提出监管要求。 在此之前&#xff0c;华丽家族当天召开股东大会&#xff0c;21项股东大会议案全部未通过。历史上&#xff0c;股东大会议案全部被否的情形…

【数据结构】红黑树

文章目录 1. 红黑树的概念与性质1.1 概念1.2 性质 2. 红黑树的实现2.1 节点和结构的定义2.2 红黑树的节点插入(重点&#xff01;&#xff01;&#xff01;&#xff01;) 3. 红黑树的验证与性能分析3.1红黑树的验证3.2红黑树的性能分析——与AVL树的对比3.3红黑树的应用 1. 红黑…

ECharts

ECharts 一、引言ECharts介绍快速上手 一、引言 ECharts介绍 ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。ECharts最初由百度团队开源&#xff0c;并于2018年初捐赠给A…

一文读懂!RK3668和RK3568有什么区别?

​ 从上图可以看出&#xff0c;RK3568和RK3566 CPU均为四核Cortex-A55架构&#xff0c;GPU为Mali-G522EE&#xff0c;内置NPU&#xff0c;可提供1T算力&#xff0c;支持DDR及CPU Cache全链路ECC等&#xff0c;RK366与RK3568最大区别的是RK3568具有PCIe接口、双千兆以太网和更…

如何轻松掌握接口测试——POST请求和COOKIE使用技巧?

目录 引言 请求方法&#xff1a; POST请求方法&#xff1a;添加资源&#xff08;对服务端已存在的资源也可以做修改和删除操作&#xff09; 实战练习 实战练习2 COOKIE&#xff1a; Status Code&#xff1a;协议状态码 接口文档 结语 引言 对于初学者或者没有接口测试…

box的符号距离函数

序 能用解析的方法算的&#xff0c;叫符号距离函数。只能数值解的&#xff0c;叫符号距离场。 它就是横平竖直的几个平面&#xff0c;点到平面的距离是很好算的。 初步认识 有个网页&#xff0c;可以玩一玩&#xff1a; About | Physics Simulation in Visual Computing (…

【LeetCode20】有效的括号——图解

​ 你好&#xff0c;欢迎来到我的博客&#xff01;作为一名程序员&#xff0c;我经常刷LeetCode题目来提升自己的编程能力。在我的博客里&#xff0c;我会分享一些我自己做过的题目和解题思路&#xff0c;希望能够帮助到大家。今天&#xff0c;我想和大家分享一道挑战性较高的题…

Flutter项目webview加载没有HTTPS证书的网页在Android和iOS设备上无法显示的解决方案

一、问题描述 Flutter项目使用谷歌官方webview库 webview_flutter&#xff0c;加载自签名证书、证书失效、无证书等HTTPS网页地址时&#xff0c;在Android或pc浏览器中提示证书失效&#xff0c;在iOS设备上为空白页&#xff0c;为了加载自签名证书的网页&#xff0c;需要饶过i…

Godot引擎 4.0 文档 - 循序渐进教程 - 脚本语言

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; Scripting languages — Godot Engine (stable) documentation in English 脚本语言 本课将概述 Godot 中可用的脚本语言。您将了解每个选项的优缺点。在下一部分中&…

平板触控笔要原装的吗?苹果平替笔性价比高的推荐

与苹果的电容笔不同&#xff0c;市场上的电容笔只会给人一种倾斜的压感&#xff0c;并不会像苹果的电容笔那样&#xff0c;可以给人一种重力的压感。不过&#xff0c;如果你不一定要画画&#xff0c;那你就不用花很多钱去买一支苹果的原装电容笔了&#xff0c;只需一支平替电容…

postgresql数据库

官方文档:link 安装及简单操作 1 安装 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql15-server sudo /usr/pgsql-15/bin/postgresql-15-setup initdb sudo …

2023.5.21 第五十四次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

MATLAB绘制动画(五)GIF

GIF这个文件大家就比较熟悉了&#xff0c;我们通常当做表情包的动图一般都是用GIF格式。 这是因为GIF格式的文件比较小&#xff0c;传输速度快。 用MATLAB生成GIF图像同样需要将图像保存下来&#xff0c;通过循环展示动画 代码如下&#xff1a; clc; clear; close all; set…

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4)

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4) 结合自由能计算 我们首先计算焙变&#xff0c;用到的是pbsa和gbsa方法。我们需要一下文件 三个top文件&#xff0c;pro.prmtop lig.prmtop com.prmtop&#xff1b;输入文件MM_GBSA.in&#xff1b;将要…

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

.NET多平台应用程序UI&#xff08;. NET MAUI&#xff09;的市场吸引力与日俱增&#xff0c;这是微软最新的开发平台&#xff0c;允许开发者使用单个代码库创建跨平台应用程序。尽管很多WPF开发人员还没有跟上 .NET MAUI的潮流&#xff0c;但我们将在这篇文章中为大家展示他的潜…

【FAQ】视频编辑服务常见问题及解答

Q1问题描述 1、 访问贴纸等素材的时候提示“网络异常&#xff0c;请重试”怎么办&#xff1f; 2、 使用AI能力时&#xff0c;提示“errorCode:20124 errorMsg:Method not Allowed”&#xff1f; 解决方案 请做以下检查&#xff1a; 1、 在代码中检查鉴权信息是否已设置。如…