当前位置: 首页 > news >正文

遗传算法【Genetic Algorithm(GA)】求解函数最大值(MATLAB and Python实现)

一、遗传算法基础知识

来自B站视频的笔记:      【超容易理解】手把手逐句带你解读并实现遗传算法的MATLAB编程(结合理论基础)_哔哩哔哩_bilibili       

1、遗传算法

         使用“适者生存”的原则,在遗传算法的每一代中,根据个体在问题域的适应度值和从生物学借鉴来的再造方法(复制、变异、交叉)进行个体选择,产生比原个体更适应环境的近似解。

2、模式定理

        二值字符集(0,1},由此产生通常的 0,1字符串。增加一个通配符“*”,既可以做 1,也可以做 0。二值字符集{0,1}可以扩展为三值字符集{0,1,*},由此可以产生 0010,001*,*11*01*这类的字符串。

3、遗传算法的本质

        是对模式所进行的一系列运算。通过选择操作将当前群体中的优良群体遗传到下一代群体中,通过交叉操作进行模式的重组,通过变异操作进行模式的突变通过这些遗传运算,一些较差的模式逐步被淘汰,而一些较好的模型逐渐被遗传和进化最终就可以达到问题的最优解。

         多个字符串隐藏着多个不同的模式,长度为L的字符串,隐藏着2^{L}个不同的模式,不同的模式所匹配的字符串个数不同,引入模式阶。

4、模式阶

        模式 001*0*的阶数为 4,而 0*****的阶数为 1,说明一个模式阶数高,说明确定性越高,样本个数越少。

5、定义距

        在模式 H中第一个确定位置和最后一个确定位置之间的距离,称之为模式距

        在遗传算法的选择、交叉、变异算子的作用下,具有低阶,短定义距,并且平均适应度高于群体平均适应度的模式在子代将呈指数级增长,最终趋向全局的最优点。

        遗传算法使用群体搜索技术,通过对当前种群施加选择、交叉、变异等一系列遗传操作产生新一代种群,并逐步使种群进化到包含近似最优解的状态。

6、二进制编码精度

        For Example 求取实数区间[0,4]上函数的最大值,传统的方法是不断调成自变量本身,直到获取函数的最大值,而遗传算法不对参数本身做调整,首先先编码,形成位串在对位串进行进化操作。【0,64】←我们可以由长度为 6的位串表示变量 x,从“000000”到“111111”并将中间的取值映射到实数区间[0,4],每个相邻的值之间的阶跃值为 4/63=0.0635。也就是编码精度精度高,解的质量高,计算量大,耗时长。

【注】个人感觉2~6讲的是把问题的解编码成01串的理论过程。感兴趣问问AI或者搜其他文献。

7、适应度

        生物种群个体适应生存环境的能力,用于评价个体优劣的数学函数。GA 算法在进化搜索中基本不需要外部信息,仅仅依靠适应度

 8、构造适应度函数的方法

        1)目标函数映射成适应度函数(常用);

        2)基于序的目标函数等。

 9、遗传操作

        优选强势个体的“选择”(选择算子),个体间交换基因产生新个体的“交叉(交叉算子),个体基因突变而产生新个体的“变异”(变异算子)。

        9.1 选择算子:

        根据个体适应度,按照一定规则,从第t代群体P(t)中选择优良个体遗传到下一代 P(t+1)中。

        轮盘赌选择法:

        它是基于比例的选择,利用个体适应度所占比例的大小来决定子代保留的可能性。若每
个个体i的适应度为 fi,种群大小为 NP,则他被选取的概率为:

pi=fi/\sum_{i=1}^{NP}fi

        个体适应度越大,被选择的机会越大,为了选择交叉个体,需要进行多轮选择,每一轮产生一个[0,1]均匀随机数,将该随机数作为选择指针来确定被选择个体。

        9.2 交叉算子

        将群体 P(t)中选中的各个个体随机搭配,对每一对个体以交叉概率 Pc 交换他们的染色体,通过交叉,遗传算法的搜索能力得以飞跃提高。

        9.3 交叉算子步骤

        从交配池中随机取出要交配的一对个体,然后,根据串长度L,对要交配的一对个体,对要交配的一对个体,随机选取[1,L-1]中的一个或者多个整数K作为交叉位置,最后,根据交叉概率实施交叉操作,配对个体在交叉位置处,相互交换各自的部分基因,从而形成新的一对个体。

        9.4 变异算子

        对群体中的每个个体,以变异概率Pm,将某一个或某一些基因座上的基因值17.改变为其他的等位基因值,0-1,1-0 根据个体编码方式的不同,变异方式有:实值变异(对相应的基因值用取值范围内的其他随机值取代),二进制变异(对应的基因取反)。

        9.5 变异算子步骤

        首先,对种群中所有个体按事先设定的变异概率判断是否进行变异,然后,对进行变异的个体随机选择变异位进行变异。

10、标准遗传算法

        优化变量由二进制算法进行描述,多个优化变量的二进制变化串接在一起组成染色体。在创建初始群体的过程中,代表个体的二进制串是在一定字长的限制下随机产生的,交叉算子作用在交叉概率选中的两个染色体上,随机选中交叉位置,将两个染色体上对应于这两个位置上的二进制数值进行交换,生成新的个体,而变异算子的作用在变异概率随机选中的个体上,一般是随机选定变异位,将该位的二进制值取反,生成一个新的个体。

二、遗传算法的流程

        初始化

        设置进化代数计数器 g=0,最大迭代数G,随机生成 NP个个体作为初始群体P(0);个体评价:计算群体P(t)中各个个体的适应度;

        选择操作

        将选择算子应用于群体,根据个体适应度满招一定的原则将优良个体传递给下-代群体。

        交叉运算

         将交叉算子应用于群体,对选中的个体以某一概率交换他们之间部分的染色体产生新的个体;

        变异运算

        将变异算子应用于群体,对选中的个体,以某一种概率改变某一个基因值为他的等位基因。   

        循环操作        

        群体 P(t)经过选择、交叉、变异运算后得到下一代种群P(t+1),计算适应度值根据适应度进行排序,准备进行下一次变异操作。终止判断条件:如果 g<G,则 g=g+1,转到个体评价步骤,如果 g>G,则次进化过程中所得到的具有最大适应度的个体作为最优解输出,终止计算。

三、关键参数说明

        种群规模 NP:影响着种群的最终结果以及遗传算法的执行效率,NP 一般取 10~200;

        交叉概率 Pc:交叉操作的使用频率,一般取 0.25~1

        变异概率 Pm:辅助性搜索操作,一般取 0.001~0.1

        终止进化代数:一般取 100~1000 之间。

四、实例分析

函数图像

MATLAB代码

%{ 
使用遗传算法求函数y = x+10*sin(5*x)+7*cos(4*x) 最大值
%}
clear ;
close all;
clc;%% 函数图像显示
x1 = 0:0.01:10;
plot(x1,func1(x1))
xlabel("x")
ylabel("f(x)")
title("f(x)= x+10*sin(5*x)+7*cos(4*x)")%% 参数设置
NP = 50;     %种群数量,即每一代中包含的个体数量
L = 20;      %二进制数串长度,用于对个体进行编码
Pc=0.8;      %交叉率,控制交叉操作的概率
Pm=0.1;      %变异率
G=100;       %最大遗传代数,即算法的迭代次数
Xs=10;       %变量x上限
Xx=0;        %变量x下限
f=randi([0,1],NP,L) ;%随机获得初始种群规模(NP*L的0-1矩阵):f= randi([区间下限,区向上限],种群规模(行数),编码长度(列数)%预分配内存,提升运行速度(可有可无)
trace1=zeros(1,G);                  %历代最优适应度
trace2=zeros(1,G);                  %平均适应度
trace3=zeros(1,G);                  %最小适应度
x= zeros(1,NP);                     %解矩阵
Fit=zeros(1,NP);                    %适应度矩阵
nf=zeros(NP,L);                     %n次迭代种群%% 遗传算法循环
for k=1:G %% 将二进制解码为定义域范围内十进制for i=1:NP U=f(i,:);                    %第一条染色体m=0;for j=1:Lm=U(j)*2^(j-1)+m;        %将每个样本由二进制转变为十进制endx(i)=Xx+m*(Xs-Xx)/(2^L-1);   %将染色体解码到定义城Fit(i) = func1(x(i));        %计算每个样本的适应度end maxFit=max(Fit);                 %最大值minFit=min(Fit);                 %最小值rr=find(Fit==maxFit);            %最大值在Fit数组中的位置,返回一个数组.fBest=f(rr(1,1),:);              %历代最优个体xBest=x(rr(1,1));                %最优适应度对应的染色体Fit=(Fit-minFit)/(maxFit-minFit);%归化适应度值%% 复制操作 (基于轮盘赌)sum_Fit=sum(Fit);                %计算种群中所有群近应值的和fitvalue=Fit./sum_Fit;           %计算每个种群的选择概率fitvalue=sum(fitvalue);          %计算每个种群的累计概率ms= sort(rand(NP,1));            %随机生成_(0,1)的有序概率密度NP大小向量,对生成的随机数进行升序排序fiti=1;newi=1;while newi<=NP                   %这是一种随机的复制方式,但总趋势是将适应度比较大的遗传下去if ms(newi)<fitvalue(fiti)  %随机新种群概率 < 种群选择概率nf(newi,:)= f(fiti,:);   %新种群的第newi行=此次选择的种群newi= newi+1;elsefiti=fiti+1;endend%% 交叉操作 (基于概率)for i=1:NP-1p=rand ;                      %随机生成一个[0,1]的概率pif p<Pc                       %控制交叉的染色体总数q=randi([0,1],1,L);       %随机生成要交叉的基因位置for j=1:Lif q(j)== 1            %f 此点f中值为1temp=nf(i+1,j);    %记录此时选择过程中的新种群第i+1行。k列的值nf(i+1,j)=nf(i,j); %新种群第i+1行。k列的值=新种群第i行。k列的值nf(i,j)=temp;      %新种群第i行,k列的值=上面记录的值,即两条相邻染色体在指定位置进行交叉endendendend%% 变异操作(基于概率)i=1;while i<=round(NP*Pm)             %控制变异染色体总数h=randi([1,NP],1,1);         %随机选取一个需要变异的染色体for j= 1:round(L*Pm)         %控制变异染色体总数g=randi([1,L],1,1);      %随机需要变异的某因数nf(h,g)=~nf(h,g);endi=i+1;endf=nf;                           %新一代种群f(1,:)=fBest;                   %保留最优个体在新种群中trace1(k)=maxFit;               %历代最优适应度trace2(k)=mean(Fit);            %平均适度值trace3(k)=minFit;               %最小值end%% 迭代过程图形化展示
xBest;
figure
hold on
plot(1:k,trace1(1:k),'r')           %历代最优适应度
% plot(1:k,trace2(1:k),'b')         %平均适度值
% plot(1:k,trace3(1:k),'g')         %最小值
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);
ylabel('适应度','fontsize',12);
legend('最大值','平均适应值','最小值')%% 保存为GIF
frame= getframe(gcf);
imind= frame2im(frame);
[imind,cm]=rgb2ind(imind,256);
if i==1imwrite(imind,cm,'Z1.gif','gif','Loopcount',inf,'DelayTime',0);
elseimwrite(imind,cm,'Z1.gif','gif','WriteMode','overwrite','DelayTime',0);
end%% 结果打印
fprintf('最优个体编码:\n')
disp(fBest)
% 每次迭代最优值
fprintf('每次迭代最优值:\n')
disp(trace1)
% 每次迭代的平均适应度值
fprintf('每次迭代的平均适应度值:\n')
disp(trace2)
% 每次迭代的最差值
fprintf('每次迭代最差值:\n')
disp(trace3)function y = func1(x)
%% 多极值函数
% x= 7.86  f(x)max=24.8534
y = x+10*sin(5*x)+7*cos(4*x);
end

 【使用AI工具DeepSeek一键转换为Python代码】

Python代码

import numpy as np
import matplotlib.pyplot as plt
from PIL import Imagedef func1(x):return x + 10 * np.sin(5 * x) + 7 * np.cos(4 * x)# 显示函数图像
x1 = np.arange(0, 10, 0.01)
y1 = func1(x1)
plt.plot(x1, y1)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('f(x)=x+10*sin(5x)+7*cos(4x)')
plt.show()# 参数设置
NP = 50        # 种群数量
L = 20         # 二进制串长度
Pc = 0.8       # 交叉率
Pm = 0.1       # 变异率
G = 100        # 遗传代数
Xs = 10        # x上限
Xx = 0         # x下限
f = np.random.randint(0, 2, (NP, L))  # 初始种群trace1 = np.zeros(G)  # 历代最优适应度
trace2 = np.zeros(G)  # 平均适应度
trace3 = np.zeros(G)  # 最差适应度# 遗传算法主循环
for k in range(G):# 解码并计算适应度x = np.zeros(NP)Fit = np.zeros(NP)for i in range(NP):U = f[i, :]m = sum(U[j] * (2 ** j) for j in range(L))  # 二进制转十进制x[i] = Xx + m * (Xs - Xx) / (2 ** L - 1)Fit[i] = func1(x[i])maxFit = np.max(Fit)minFit = np.min(Fit)rr = np.where(Fit == maxFit)[0]fBest = f[rr[0], :]xBest = x[rr[0]]# 归一化适应度if maxFit == minFit:Fit_normalized = np.ones(NP)else:Fit_normalized = (Fit - minFit) / (maxFit - minFit)# 轮盘赌选择sum_Fit = np.sum(Fit_normalized)if sum_Fit == 0:fitvalue = np.ones(NP) / NPelse:fitvalue = Fit_normalized / sum_Fitcum_prob = np.cumsum(fitvalue)# 生成新种群nf = np.zeros_like(f)ms = np.sort(np.random.rand(NP))newi, fiti = 0, 0while newi < NP and fiti < NP:if ms[newi] < cum_prob[fiti]:nf[newi] = f[fiti]newi += 1else:fiti += 1# 交叉操作for i in range(NP - 1):if np.random.rand() < Pc:q = np.random.randint(0, 2, L)mask = q.astype(bool)# 交换相邻个体的基因temp = nf[i, mask].copy()nf[i, mask] = nf[i+1, mask]nf[i+1, mask] = temp# 变异操作num_mutants = int(round(NP * Pm))for _ in range(num_mutants):h = np.random.randint(0, NP)num_genes = int(round(L * Pm))genes = np.random.choice(L, num_genes, replace=False)nf[h, genes] = 1 - nf[h, genes]# 保留最优个体nf[0] = fBestf = nf.copy()# 记录数据trace1[k] = maxFittrace2[k] = np.mean(Fit)trace3[k] = minFit# 绘制适应度变化曲线
plt.plot(trace1, 'r', label='Max Fitness')
#plt.plot(trace2, 'b', label='Average Fitness')
#plt.plot(trace3, 'g', label='Min Fitness')
plt.xlabel('Generation')
plt.ylabel('Fitness')
plt.title('Fitness Evolution')
plt.legend()
plt.show()# 输出结果
print("Optimal solution x:", xBest)
print("Maximum fitness:", maxFit)

相关文章:

遗传算法【Genetic Algorithm(GA)】求解函数最大值(MATLAB and Python实现)

一、遗传算法基础知识 来自B站视频的笔记&#xff1a; 【超容易理解】手把手逐句带你解读并实现遗传算法的MATLAB编程&#xff08;结合理论基础&#xff09;_哔哩哔哩_bilibili 1、遗传算法 使用“适者生存”的原则&#xff0c;在遗传算法的每一代中&#xff0c;…...

HTB:Administrator[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…...

正则表达式中常见的贪婪词

1. * 含义&#xff1a;匹配前面的元素零次或者多次。示例&#xff1a;对于正则表达式 a*&#xff0c;在字符串 "aaaa" 中&#xff0c;它会匹配整个 "aaaa"&#xff0c;因为它会尽可能多地匹配 a 字符。代码示例&#xff08;Python&#xff09;&#xff1a…...

高阶C语言|深入理解字符串函数和内存函数

文章目录 前言1.求字符串长度1.1 字符串长度函数&#xff1a;strlen模拟实现 2.长度不受限制的字符串函数2.1 字符串拷贝函数&#xff1a;strcpy模拟实现 2.2 字符串连接函数&#xff1a;strcat模拟实现 2.3 字符串比较函数&#xff1a;strcmp模拟实现 3.长度受限制的字符串函数…...

grpc 和 http 的区别---二进制vsJSON编码

gRPC 和 HTTP 是两种广泛使用的通信协议&#xff0c;各自适用于不同的场景。以下是它们的详细对比与优势分析&#xff1a; 一、核心特性对比 特性gRPCHTTP协议基础基于 HTTP/2基于 HTTP/1.1 或 HTTP/2数据格式默认使用 Protobuf&#xff08;二进制&#xff09;通常使用 JSON/…...

基于 RAG 的聊天机器人的追踪、日志和指标:结合 Elastic 的 OpenTelemetry 分发

作者&#xff1a;来自 Elastic Bahubali Shetti 如何使用 Elasticsearch 观察基于 OpenAI RAG 的应用程序。使用 OpenTelemetry 对应用程序进行检测&#xff0c;收集日志、跟踪、指标&#xff0c;并了解 LLM 在 Kubernetes 和 Docker 上使用 OpenTelemetry 的 Elastic 分发的表…...

6.二分算法

二分 二分算法&#xff0c;也称为二分查找或折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。以下是 C 中二分算法的相关内容&#xff1a; 算法原理 二分算法的基本思想是将有序数组分成两部分&#xff0c;然后将目标值与中间元素进行比较。如果目标值等于中…...

Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年

Android Studio 1.0 宣发于 2014 年 12 月&#xff0c;而现在时间来到 2025 &#xff0c;不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年&#xff0c;也代表着了我的职业生涯也超十年&#xff0c;现在回想起来依然觉得「唏嘘」&#xff…...

“LoRA技术中参数初始化策略:为何A参数采用正态分布而B参数初始化为0”

在LoRA&#xff08;Low-Rank Adaptation&#xff09;中&#xff0c;参数A和B的初始化策略是经过精心设计的&#xff0c;以确保模型训练的稳定性和有效性。具体来说&#xff0c;参数A通常被初始化为正态分布&#xff0c;而参数B则初始化为0。这样的设计有以下几个优点&#xff1…...

PyTorch中的movedim、transpose与permute

在PyTorch中&#xff0c;movedim、transpose 和 permute这三个操作都可以用来重新排列张量&#xff08;tensor&#xff09;的维度&#xff0c;它们功能相似却又有所不同。 movedim &#x1f517; torch.movedim 用途&#xff1a;将张量的一个或多个维度移动到新的位置。参数&…...

灰色预测模型

特点&#xff1a; 利用少量、不完全的信息 预测的是指数型的数值 预测的是比较近的数据 灰色生成数列原理&#xff1a; 累加生成&#xff1a; 累减生成&#xff1a;通过累减生成还原成原始数列。 加权相邻生成&#xff1a;&#xff08;会更接近每月中旬&#xff0c;更推荐…...

Java 16进制 10进制 2进制数 相互的转换

在 Java 中&#xff0c;进行进制之间的转换时&#xff0c;除了功能的正确性外&#xff0c;效率和安全性也很重要。为了确保高效和相对安全的转换&#xff0c;我们通常需要考虑&#xff1a; 性能&#xff1a;使用内置的转换方法&#xff0c;如 Integer.toHexString()、Integer.…...

CPU 100% 出现系统中断 怎么解决

CPU 100% 出现系统中断 怎么解决 电脑开机时会掉帧&#xff0c;切换到桌面时就会卡顿&#xff0c;然后打开任务管理器就会看到系统中断的cpu占用率达到100%&#xff0c;过一段时间再打开还是会有显示100%的占用率&#xff0c;这个问题怎么解决&#xff1f; 文章目录 CPU 100% …...

Python-基于mediapipe,pyautogui,cv2和numpy的电脑手势截屏工具(进阶版)

前言:在我们的日常生活中,手机已经成为我们每天工作,学习,生活的一个不可或缺的部分。众所周知:为了我们的使用方便,手机里面的很多功能非常人性化,既便捷又高效,其中就有手机的截屏方式,它们花样繁多,如三指截屏,手势截屏等。那么怎么在电脑里面也实现这个功能呢?…...

设计转换Apache Hive的HQL语句为Snowflake SQL语句的Python程序方法

首先&#xff0c;根据以下各类HQL语句的基本实例和官方文档记录的这些命令语句各种参数设置&#xff0c;得到各种HQL语句的完整实例&#xff0c;然后在Snowflake的官方文档找到它们对应的Snowflake SQL语句&#xff0c;建立起对应的关系表。在这个过程中要注意HQL语句和Snowfla…...

2025年人工智能技术:Prompt与Agent的发展趋势与机遇

文章目录 一、Prompt与Agent的定义与区别(一)定义(二)区别二、2025年Prompt与Agent的应用场景(一)Prompt的应用场景(二)Agent的应用场景三、2025年Prompt与Agent的适合群体(一)Prompt适合的群体(二)Agent适合的群体四、2025年Prompt与Agent的发展机遇(一)Prompt的…...

[论文总结] 深度学习在农业领域应用论文笔记14

当下&#xff0c;深度学习在农业领域的研究热度持续攀升&#xff0c;相关论文发表量呈现出迅猛增长的态势。但繁荣背后&#xff0c;质量却不尽人意。相当一部分论文内容空洞无物&#xff0c;缺乏能够落地转化的实际价值&#xff0c;“凑数” 的痕迹十分明显。在农业信息化领域的…...

STM32 ADC单通道配置

硬件电路 接线图&#xff1a; ADC基本结构图 代码配置 根据基本结构框图 1.定义结构体变量 //定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量 ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量 2.开启RCC时钟 ADC、GPIO的时钟&#x…...

Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别

Go语言中的流程控制语句逻辑结构与其他编程语言类似&#xff0c;格式有些不同。Go语言的流程控制中&#xff0c;包括if、switch、for、range、goto等语句&#xff0c;没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句&#xff08;不常用…...

Day50:字典的合并

在 Python 中&#xff0c;字典是一个可变的数据类型&#xff0c;经常需要将多个字典合并成一个字典。合并字典的方式有多种&#xff0c;今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…...

【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027

本文涉及知识点 C动态规划 离散化 LeetCode1626. 无矛盾的最佳球队 假设你是球队的经理。对于即将到来的锦标赛&#xff0c;你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而&#xff0c;球队中的矛盾会限制球员的发挥&#xff0c;所以必须选…...

LeetCode 热题 HOT 100

你好呀&#xff0c;欢迎来到 Dong雨 的技术小栈 &#x1f331; 在这里&#xff0c;我们一同探索代码的奥秘&#xff0c;感受技术的魅力 ✨。 &#x1f449; 我的小世界&#xff1a;Dong雨 &#x1f4cc; 分享我的学习旅程 &#x1f6e0;️ 提供贴心的实用工具 &#x1f4a1; 记…...

从未标记图像中生成有标记图像特征的半监督分割方法

今天看到一篇文章很有意思&#xff0c;给大家分享一下。现在传统半监督分割网络训练时往往有标注数据与未标注数据分开训练&#xff0c;导致模型不好。这篇文章作者提出了一个很有意思的想法。它通过通道注意力从未标记的特征中重新加载标记的特征。这篇文章是AllSpark。 大家感…...

随笔 | 写在一月的最后一天

. 前言 这个月比预想中过的要快更多。突然回看这一个月&#xff0c;还有点不知从何提笔。 整个一月可以总结为以下几个关键词&#xff1a; 期许&#xff0c;保持期许出现休息 . 期许 关于期许&#xff0c;没有什么时候比一年伊始更适合设立目标和计划的了。但令人惭愧的…...

AI大模型开发原理篇-2:语言模型雏形之词袋模型

基本概念 词袋模型&#xff08;Bag of Words&#xff0c;简称 BOW&#xff09;是自然语言处理和信息检索等领域中一种简单而常用的文本表示方法&#xff0c;它将文本看作是一组单词的集合&#xff0c;并忽略文本中的语法、词序等信息&#xff0c;仅关注每个词的出现频率。 文本…...

DDD - 领域驱动设计分层架构:构建可演化的微服务架构

文章目录 引言1. 什么是DDD分层架构&#xff1f;1.1 DDD分层架构的演变1.2 四层架构的起源与问题1.3 依赖倒置和五层架构 2. DDD分层架构的核心层次2.1 用户接口层&#xff08;User Interface Layer&#xff09;2.2 应用层&#xff08;Application Layer&#xff09;2.3 领域层…...

Spring Boot项目如何使用MyBatis实现分页查询及其相关原理

写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油&#xff0c;冲鸭&#x…...

CSS 值和单位详解:从基础到实战

CSS 值和单位详解&#xff1a;从基础到实战 1. 什么是 CSS 的值&#xff1f;示例代码&#xff1a;使用颜色关键字和 RGB 函数 2. 数字、长度和百分比2.1 长度单位绝对长度单位相对长度单位 2.2 百分比 3. 颜色3.1 颜色关键字3.2 十六进制 RGB 值3.3 RGB 和 RGBA 值3.4 HSL 和 H…...

搭建自己的专属AI——使用Ollama+AnythingLLM+Python实现DeepSeek本地部署

前言 最近DeepSeek模型非常火&#xff0c;其通过对大模型的蒸馏得到的小模型可以较轻松地在个人电脑上运行&#xff0c;这也使得我们有机会在本地构建一个专属于自己的AI&#xff0c;进而把AI“调教”为我们希望的样子。本篇文章中我将介绍如何使用OllamaAnythingLLMPython实现…...

【AI绘画】MidJourney关键词{Prompt}全面整理

AI绘画整理&#xff0c;MidJourney关键词。喜欢AI绘画的朋友必备&#xff0c;建议收藏&#xff0c;后面用到时供查阅使用。 1、光线与影子篇 中 英 闪耀的霓虹灯 shimmeringneon lights 黑暗中的影子 shadows in the dark 照亮城市的月光 moonlightilluminatingthe cit…...

如何将IP切换到海外:详细指南

在现代互联网应用中&#xff0c;IP地址成为了网络通信和数据交换的基础。然而&#xff0c;很多时候&#xff0c;由于区域限制或隐私保护的需求&#xff0c;用户可能需要将自己的IP地址切换到海外。无论是为了绕过地域限制访问内容&#xff0c;还是为了提高隐私安全&#xff0c;…...

蓝牙技术在物联网中的应用有哪些

蓝牙技术凭借低功耗、低成本和易于部署的特性&#xff0c;在物联网领域广泛应用&#xff0c;推动了智能家居、工业、医疗、农业等多领域发展。 智能家居&#xff1a;在智能家居系统里&#xff0c;蓝牙技术连接各类设备&#xff0c;像智能门锁、智能灯泡、智能插座、智能窗帘等。…...

YOLOv8:目标检测与实时应用的前沿探索

随着深度学习和计算机视觉技术的迅速发展&#xff0c;目标检测&#xff08;Object Detection&#xff09;一直是研究热点。YOLO&#xff08;You Only Look Once&#xff09;系列模型作为业界广受关注的目标检测框架&#xff0c;凭借其高效、实时的特点&#xff0c;一直迭代更新…...

LeetCode:62.不同路径

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &…...

范冰冰担任第75届柏林电影节主竞赛单元评委 共鉴电影佳作

近日&#xff0c;备受瞩目的柏林电影节迎来了新一届盛事&#xff0c;而华人演员范冰冰将以主竞赛单元评委身份亮相&#xff0c;引发了广泛关注。此前她已担任过戛纳国际电影节、东京国际电影节、圣塞巴斯蒂安国际电影节等众多电影节主竞赛单元评委。作为国际影坛的知名人物&…...

基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)

四、特征工程 4.1 分子描述符计算 分子描述符作为量化分子性质的关键数值,能够从多维度反映药物分子的结构和化学特征,在药物相互作用预测中起着举足轻重的作用。RDKit 库凭借其强大的功能,为我们提供了丰富的分子描述符计算方法,涵盖了多个重要方面的分子性质。 分子量…...

【C语言】内存管理

【C语言】内存管理 文章目录 【C语言】内存管理1.概念2.库函数3.动态分配内存malloccalloc 4.重新调整内存的大小和释放内存reallocfree 1.概念 C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。 在 C 语言中&#xff0c;内存是通过…...

团体程序设计天梯赛-练习集——L1-029 是不是太胖了

前言 5分级别里面目前做到的最难的一道题&#xff0c;但是非常简单&#xff0c;5分的题看看写点代码就行了。 L1-029 是不是太胖了 据说一个人的标准体重应该是其身高&#xff08;单位&#xff1a;厘米&#xff09;减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数…...

appmatrix平台(一个汇集原创web APP的平台)服务规划

Appmatrix平台&#xff08;一个汇集原创web APP的平台&#xff09;服务规划 Web app是部署机器学习、深度学习等需要算力较大的应用的主要形式&#xff0c;一般都是独立、散在部署&#xff0c;对使用和相互交流造成了一定的不便。App Matrix将各类web应用汇集在一起&#xff0…...

vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列

最近在家过年闲的没事&#xff0c;于是研究起深度学习开发工具链的配置和安装&#xff0c;之前欲与天公试比高&#xff0c;尝试在win上用vscodecuda11.6vs2019的cl编译器搭建cuda c编程环境&#xff0c;最后惨败&#xff0c;沦为笑柄&#xff0c;痛定思痛&#xff0c;这次直接和…...

pytorch实现长短期记忆网络 (LSTM)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 LSTM 通过 记忆单元&#xff08;cell&#xff09; 和 三个门控机制&#xff08;遗忘门、输入门、输出门&#xff09;来控制信息流&#xff1a; 记忆单元&#xff08;Cell State&#xff09; 负责存储长期信息&…...

洛谷P2651 添加括号III

题目链接&#xff1a;P2651 添加括号III - 洛谷 | 计算机科学教育新生态 题目难度:普及一 题目分析&#xff1a; a1肯定是分子&#xff0c;a2肯定是分母&#xff0c;那么尽可能多的是a3以后的变为分子&#xff0c;怎么办呢&#xff1f; a1/(a2/a3/a4/...)a1a3a4.../a2&#…...

Mysql进阶学习

目录 一.Mysql服务器内部架构(了解) 二.Mysql引擎 2.1 innodb引擎 2.2 myisam引擎 三.索引 3.1索引分类 3.2mysql索引数据结构 3.3聚簇索引和非聚簇索引 3.4回表查询 3.5索引下推 四.事务 数据库事务特征 事务隔离性&#xff0c;隔离级别 事务实现原理 五.锁 ①…...

白话DeepSeek-R1论文(二)| DeepSeek-R1:AI “升级打怪”,从“自学成才”到“全面发展”!

最近有不少朋友来询问Deepseek的核心技术&#xff0c;今天开始陆续针对DeepSeek-R1论文中的核心内容进行解读&#xff0c;并且用大家都能听懂的方式来解读。这是第二篇趣味解读。 DeepSeek-R1&#xff1a;AI “升级打怪”&#xff0c;从“自学成才”到“全面发展”&#xff01…...

WordPress eventon-lite插件存在未授权信息泄露漏洞(CVE-2024-0235)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

python 语音识别

目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…...

2501,编写dll

DLL的优点 简单的说,dll有以下几个优点: 1)节省内存.同一个软件模块,若是源码重用,则会在不同可执行程序中编译,同时运行这些exe时,会在内存中重复加载这些模块的二进制码. 如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,每个进程会复制一份的d…...

Linux命令汇总

1、帮忙类 --help 直接在当前窗口显示帮助 command --help man 创建新窗口显示帮助 man command 2、目录操作类 2.1、查看目录 ls:以列表方式&#xff0c;查看目录中内容 tree:以树状方式&#xff0c;查看目录中内容 2.2、创建、删除文件及目录 touch&#xff1a;创建…...

漏洞扫描工具之xray

下载地址&#xff1a;https://github.com/chaitin/xray/releases 1.9.11 使用文档&#xff1a;https://docs.xray.cool/tools/xray/Scanning 与burpsuite联动&#xff1a; https://xz.aliyun.com/news/7563 参考&#xff1a;https://blog.csdn.net/lza20001103/article/details…...

Java手写简单Merkle树

Java手写Merkle树代码 package com.blockchain.qgy.component;import com.blockchain.qgy.model.MerkleTreeNode; import com.blockchain.qgy.util.SHAUtil;import java.util.*;public class MerkleTree<T> {//merkle树private List<MerkleTreeNode<T>> lis…...