南京邮电大学《智能控制技术》课后作业

一、问题一

        复现二输入单输出模糊控制系统,改动其中一到两个环节(隶属度设置、规则等),对比修改前后控制效果。

定义模糊

%Fuzzy Control for water tank
clear all;
close all;a=newfis('fuzz_tank');%Fuzzy Inference System structurea=addvar(a,'input','e',[-3,3]);            %Parameter e
a=addmf(a,'input',1,'NB','zmf',[-3,-1]);
a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);
a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'output','u',[-4,4]);          %Parameter u
a=addmf(a,'output',1,'NB','zmf',[-4,-1]);
a=addmf(a,'output',1,'NS','trimf',[-4,-2,1]);
a=addmf(a,'output',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'output',1,'PS','trimf',[-1,2,4]);
a=addmf(a,'output',1,'PB','smf',[1,4]);rulelist=[1 1 1 1;         %Edit rule base2 2 1 1;3 3 1 1;4 4 1 1;5 5 1 1];a=addrule(a,rulelist);a1=setfis(a,'DefuzzMethod','mom');  %Defuzzy,解模糊的方法等(centroid,bisector,middle of maximum,largest of maximum,smallest of maximum)
writefis(a1,'tank');                %Save to fuzzy file "tank.fis"
a2=readfis('tank');figure(1);
plotfis(a2);
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'output',1);flag=1;
if flag==1showrule(a)            %Show fuzzy rule baseruleview('tank');      %Dynamic Simulation
end
disp('-------------------------------------------------------');
disp('      fuzzy controller table:e=[-3,+3],u=[-4,+4]       ');
disp('-------------------------------------------------------');for i=1:1:7e(i)=i-4;Ulist(i)=evalfis([e(i)],a2);
end
Ulist=round(Ulist)e=-3;        % Error
u=evalfis([e],a2)   %Using fuzzy inference

进行求解

%Define N+1 triangle membership function
clear all;
close all;
N=2;x=0:0.1:100;
for i=1:N+1f(i)=100/N*(i-1);
endu=trimf(x,[f(1),f(1),f(2)]);
figure(1);
plot(x,u);for j=2:Nu=trimf(x,[f(j-1),f(j),f(j+1)]);hold on;plot(x,u);
end
u=trimf(x,[f(N),f(N+1),f(N+1)]);
hold on;
plot(x,u);
xlabel('x');
ylabel('Degree of membership');
%Define N+1 triangle membership function
clear all;
close all;
z=0:0.1:60;u=trimf(z,[0,0,10]);
figure(1);
plot(z,u);u=trimf(z,[0,10,25]);
hold on;
plot(z,u);u=trimf(z,[10,25,40]);
hold on;
plot(z,u);u=trimf(z,[25,40,60]);
hold on;
plot(z,u);u=trimf(z,[40,60,60]);
hold on;
plot(z,u);xlabel('z');
ylabel('Degree of membership');

修改隶属关系

%Fuzzy Control for washer
clear all;
close all;a=newfis('fuzz_wash');a=addvar(a,'input','x',[0,100]);                %Fuzzy Stain
a=addmf(a,'input',1,'SD','trimf',[0,0,50]);
a=addmf(a,'input',1,'MD','trimf',[0,50,100]);
a=addmf(a,'input',1,'LD','trimf',[50,100,100]);a=addvar(a,'input','y',[0,100]);                %Fuzzy Axunge
a=addmf(a,'input',2,'NG','trimf',[0,0,50]);
a=addmf(a,'input',2,'MG','trimf',[0,50,100]);
a=addmf(a,'input',2,'LG','trimf',[50,100,100]);a=addvar(a,'output','z',[0,60]);                %Fuzzy Time
a=addmf(a,'output',1,'VS','trimf',[0,0,10]);
a=addmf(a,'output',1,'S','trimf',[0,10,25]);
a=addmf(a,'output',1,'M','trimf',[10,25,40]);
a=addmf(a,'output',1,'L','trimf',[25,40,60]);
a=addmf(a,'output',1,'VL','trimf',[40,60,60]);rulelist=[1 1 1 1 1;                            %Edit rule base1 2 3 1 1;1 3 4 1 1;2 1 2 1 1;2 2 3 1 1;2 3 4 1 1;3 1 3 1 1;3 2 4 1 1;3 3 5 1 1];a=addrule(a,rulelist);
showrule(a)                         %Show fuzzy rule basea1=setfis(a,'DefuzzMethod','mom');  %Defuzzy
% (1)centroid:面积重心法;
% (2)bisector:面积等分法;
% (3)mom:最大隶属度平均法;
% (4)som最大隶属度取小法;
% (5)lom:大隶属度取大法;% a1=setfis(a,'DefuzzMethod','centroid');  %Defuzzy
writefis(a1,'wash');                %Save to fuzzy file "wash.fis"
a2=readfis('wash');figure(1);
plotfis(a2);
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'input',2);
figure(4);
plotmf(a,'output',1);ruleview('wash');  %Dynamic Simulationx=60;
y=70;
z=evalfis([x,y],a2)   %Using fuzzy inference

二、问题二

1.改变一个控制参数大小,其他参数取默认值,看控制效果
2.修改delta值看效果
3.在simulink模型上添加不同干扰、噪声,查看默认控制参数下的控制效果
作业框架(套路):改了哪些参数、怎么改的、效果如何、为什么

控制函数

function [sys,x0,str,ts] = spacemodel(t,x,u,flag)
switch flag,
case 0,[sys,x0,str,ts]=mdlInitializeSizes;
case 1,sys=mdlDerivatives(t,x,u);
case 3,sys=mdlOutputs(t,x,u);
case {2,4,9}sys=[];
otherwiseerror(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
global cij bj c
sizes = simsizes;
sizes.NumContStates  = 5;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 4;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0  = 0*ones(1,5);
str = [];
ts  = [];
cij=[-1 -0.5 0 0.5 1;-1 -0.5 0 0.5 1];
bj=1.0;
c=15;
function sys=mdlDerivatives(t,x,u)
global cij bj c
x1d=u(1);dx1d=cos(t);
x1=u(2);x2=u(3);
e=x1d-x1;
de=dx1d-x2;
s=c*e+de;xi=[x1;x2];
h=zeros(5,1);
for j=1:1:5h(j)=exp(-norm(xi-cij(:,j))^2/(2*bj^2));
end
gama=0.015;
W=[x(1) x(2) x(3) x(4) x(5)]';
for i=1:1:5sys(i)=-1/gama*s*h(i);
end
function sys=mdlOutputs(t,x,u)
global cij bj c
x1d=u(1);
dx1d=cos(t);ddx1d=-sin(t);
x1=u(2);
x2=u(3);
e=x1d-x1;
de=dx1d-x2;s=c*e+de;
W=[x(1) x(2) x(3) x(4) x(5)]';
xi=[x1;x2];
h=zeros(5,1);
for j=1:1:5h(j)=exp(-norm(xi-cij(:,j))^2/(2*bj^2));
end
fn=W'*h;
b=133;
xite=1.10;
%ut=1/b*(-fn+ddx1d+c*de+xite*sign(s));delta=0.05;
kk=1/delta;
if abs(s)>deltasats=sign(s);
elsesats=kk*s;
end
% ut=1/b*(-fn+ddx1d+c*de+xite*sats);
ut=1/b*(-fn+ddx1d+c*de+xite*sats+1*s);sys(1)=ut;
sys(2)=fn;

绘图函数

close all;
% 
% figure(1);
% subplot(211);
% plot(t,y(:,1),'k',t,y(:,2),'r:','linewidth',2);
% xlabel('time(s)');ylabel('Position tracking');
% legend('ideal position signal','practical signal');
% subplot(212);
% plot(t,cos(t),'k',t,y(:,3),'r:','linewidth',2);
% xlabel('time(s)');ylabel('Speed tracking');
% legend('ideal speed signal','practical signal');
% 
% figure(2);
% plot(t,u(:,1),'k','linewidth',2);
% xlabel('time(s)');ylabel('Control input');
% 
% figure(3);
% plot(t,fx(:,1),'k',t,fx(:,2),'r:','linewidth',2);
% xlabel('time(s)');ylabel('fx and estiamted fx');
% legend('fx','estiamted fx');subplot(2,3,1);
plot(t,y(:,1),'k',t,y(:,2),'r:','linewidth',2);
xlabel('time(s)');ylabel('Position tracking');
legend('ideal position signal','practical signal');
daspect([10,4,1])
subplot(2,3,4);
plot(t,cos(t),'k',t,y(:,3),'r:','linewidth',2);
xlabel('time(s)');ylabel('Speed tracking');
legend('ideal speed signal','practical signal');
daspect([10,4,1])subplot(2,3,[2 5]);
plot(t,u(:,1),'k','linewidth',2);
xlabel('time(s)');ylabel('Control input');
daspect([10,0.2,1])subplot(2,3,[3 6]);
plot(t,fx(:,1),'k',t,fx(:,2),'r:','linewidth',2);
xlabel('time(s)');ylabel('fx and estiamted fx');
legend('fx','estiamted fx');
daspect([10,40,1])

三、问题三

        比较遗传算法和差分进化解决同一优化问题的速度,哪个快?注明你电脑的CPU型号和主频,内存大小。轨迹规划,修改变异因子F(也称放大因子)、交叉因子(CR)、群体规模(M),查看轨迹生成效果和运行时间。

优化主程序:

clear all;
close all;
global TE G ts
Size=50;  %样本个数
D=4;      %每个样本有4个固定点,即分成4段
F=0.5;    %变异因子
CR=0.9;   %交叉因子Nmax=30;  %DE优化次数TE=1;     %参考轨迹参数TE
thd=0.50;
aim=[TE;thd];%摆线路径终点start=[0;0];%路径起点
tmax=3*TE;  %仿真时间n=500;
ts=TE/(2*n); %将TE分为1000个点,每段长度(步长)为tsG=tmax/ts;  %仿真时间为G=3000
%***************摆线参考轨迹*************%
th0=0;    
for k=1:1:G
t(k)=k*ts;  %t(1)=0.001;t(2)=0.002;.....
if t(k)<TEthr(k)=(thd-th0)*(t(k)/TE-1/(2*pi)*sin(2*pi*t(k)/TE))+th0;   %不含原点的参考轨迹(1)
else thr(k)=thd;
end
end
%(1)初始化路径
for i=1:Sizefor j=1:DPath(i,j)=rand*(thd-th0)+th0;end
end%**********差分进化计算***************%
for N=1:Nmax
%(2)变异for i=1:Sizer1=ceil(Size*rand);r2=ceil(Size*rand);r3=ceil(Size*rand);while(r1==r2||r1==r3||r2==r3||r1==i||r2==i||r3==i)%选取不同的r1,r2,r3,且不等于ir1=ceil(Size*rand);r2=ceil(Size*rand);r3=ceil(Size*rand);endfor j=1:Dmutate_Path(i,j)=Path(r1,j)+F.*(Path(r2,j)-Path(r3,j));%选择前半部分产生变异个体end
%(3)交叉for j=1:Dif rand<=CRcross_Path(i,j)=mutate_Path(i,j);elsecross_Path(i,j)=Path(i,j);endend
%(4)选择算法        %先进行三次样条插值,此为D=4时的特殊情况%XX(1)=0;XX(2)=200*ts;XX(3)=400*ts;XX(4)=600*ts;XX(5)=800*ts;XX(6)=1000*ts;YY(1)=th0;YY(2)=cross_Path(i,1);YY(3)=cross_Path(i,2);YY(4)=cross_Path(i,3);YY(5)=cross_Path(i,4);YY(6)=thd;dY=[0 0];cross_Path_spline=spline(XX,YY,linspace(0,1,1000));%输出插值拟合后的曲线,注意步长nt的一致,此时输出1000个点YY(2)=Path(i,1);YY(3)=Path(i,2);YY(4)=Path(i,3);YY(5)=Path(i,4);Path_spline=spline(XX,YY,linspace(0,1,1000));%***   计算指标并比较***%for k=1:1000        distance_cross(i,k)=abs(cross_Path_spline(k)-thr(k));          %计算交叉后的轨迹与参考轨迹的距离值distance_Path(i,k)=abs(Path_spline(k)-thr(k));                 %计算插值后的轨迹与参考轨迹的距离值endnew_object    = chap15_8obj(cross_Path_spline,distance_cross(i,:),0);   %计算交叉后的能量消耗最低及路径逼近最佳值的和formal_object = chap15_8obj(Path_spline,distance_Path(i,:),0);          %计算插值后的能量消耗最低及路径逼近最佳值的和if new_object<=formal_objectFitness(i)=new_object;Path(i,:)=cross_Path(i,:);elseFitness(i)=formal_object;Path(i,:)=Path(i,:);end
%结束end[iteraion_fitness(N),flag]=min(Fitness);%记下第NC次迭代的最小数值及其维数lujing(N,:)=Path(flag,:)               %第NC次迭代的最佳路径fprintf('N=%d Jmin=%g\n',N,iteraion_fitness(N));    
end
[Best_fitness,flag1]=min(iteraion_fitness);
Best_solution=lujing(flag1,:);
YY(2)=Best_solution(1);YY(3)=Best_solution(2);YY(4)=Best_solution(3);YY(5)=Best_solution(4);Finally_spline=spline(XX,YY,linspace(0,1,1000));
chap15_8obj(Finally_spline,distance_Path(Size,:),1);figure(3);
plot((0:0.001:tmax),[0,thr(1:1:3000)],'k','linewidth',2);
xlabel('Time (s)');ylabel('Ideal Path');
hold on;
plot((0:0.2:1), YY,'ko','linewidth',2);
hold on;
plot((0:0.001:1),[0,Finally_spline],'k-.','linewidth',2);
xlabel('Time (s)');ylabel('Optimized Path');
legend('Ideal Path','Interpolation points','Optimized Path');figure(4);
plot((1:Nmax),iteraion_fitness,'k','linewidth',2);
xlabel('Time (s)');ylabel('Fitness Change');

目标函数程序

%***********计算控制输入能量消耗最低及路径逼近最佳值之和的子函数*************%
function Object=object(path,distance,flag)  %path,distance是2000维
global TE G ts
w=0.60;
th_1=0;tol_1=0;e_1=0;
tmax=3*TE; %目标函数积分上限为3TE
thd=0.5;
thop_1=0;dthop_1=0;
x1_1=0;x2_1=0;
for k=1:1:G   %Begin th(k)从2开始和thop(1)对应t(k)=k*ts;if t(k)<=TEthop(k)=path(k); %要逼近的最优轨迹dthop(k)=(thop(k)-thop_1)/ts;ddthop(k)=(dthop(k)-dthop_1)/ts;elsethop(k)=thd;dthop(k)=0;ddthop(k)=0;        end    %离散模型
I=1/133;b=25/133;
d(k)=1*sin(k*ts);x2(k)=x2_1+ts*1/I*(tol_1-b*x2_1+d(k));
x1(k)=x1_1+ts*x2(k);th(k)=x1(k); 
dth(k)=x2(k); e(k)=thop(k)-th(k);
de(k)=(e(k)-e_1)/ts;         kp=300;kd=0.30;tol(k)=kp*e(k)+kd*de(k);energy(k)=abs(tol(k)*dth(k));tol_1=tol(k);x1_1=x1(k);x2_1=x2(k);e_1=e(k);thop_1=thop(k);dthop_1=dthop(k);
end 
%************计算总能量******************%
energy_all=0;
for k=1:1:Genergy_all=energy_all+energy(k);
end
dis=sum(distance);%参考轨迹的逼近误差
%********计算目标********%
Object=w*energy_all+(1-w)*dis;  %used for main.m
if flag==1t(1)=0;th0=0;for k=1:1:G   %>TE 不包含原点t(k)=k*ts;if t(k)<TEthr(k)=(thd-th0)*(t(k)/TE-1/(2*pi)*sin(2*pi*t(k)/TE))+th0;   %不含原点的参考轨迹else thr(k)=thd;endendfigure(1);plot(t,thr,'r.-',t,thop,'k',t,th,'k-.','linewidth',2);legend('Ideal trajectory','Optimal trajectory', 'Trajectory tracking');xlabel('Time (s)');ylabel('Joint angle tracking');figure(2);plot(t,tol,'k','linewidth',2);xlabel('Time (s)');ylabel('Control input,tol');
end
end

四、问题四

        修改权值等参数查看算法收敛性和求解结果,修改城市数量,查看算法增长时间

% TSP Solving by Hopfield Neural Network
function TSP_hopfield()
clear all;
close all;%Step 1: Initialization
A=1.5;
D=1;
Mu=50;
Step=0.01;%Step 2: %Calculate initial route length
N=8;
cityfile = fopen('city8.txt','rt' );
cities = fscanf(cityfile, '%f %f',[ 2,inf] )
fclose(cityfile);
Initial_Length=Initial_RouteLength(cities); DistanceCity=dist(cities',cities);
%Step 3:  Initialization NN
U=rands(N,N);
V=1./(1+exp(-Mu*U)); % S functionfor k=1:1:2000 
times(k)=k;
%Step 4: Calculate du/dtdU=DeltaU(V,DistanceCity,A,D);
%Step 5: Calculate u(t)U=U+dU*Step;
%Step 6: Calculate output of NNV=1./(1+exp(-Mu*U)); % S function
%Step 7: Calculate energy functionE=Energy(V,DistanceCity,A,D);Ep(k)=E;
%Step 8: Check validity of the route[V1,CheckR]=RouteCheck(V); 
end%Step 9: Results
if(CheckR==0)Final_E=Energy(V1,DistanceCity,A,D);Final_Length=Final_RouteLength(V1,cities); %Give final lengthdisp('Iteration times');kdisp(' the optimization route is');V1disp('Final optimization engergy function:');Final_Edisp('Initial length');Initial_Lengthdisp('Final optimization length');Final_LengthPlotR(V1,cities); 
elsedisp('the optimization route is');V1disp('the route is invalid');
endfigure(2);
plot(times,Ep,'r','linewidth',2);
title('Energy Function Change');
xlabel('k');ylabel('E');% Calculate energy function
function E=Energy(V,d,A,D)
[n,n]=size(V);
t1=sumsqr(sum(V,2)-1);
t2=sumsqr(sum(V,1)-1);
PermitV=V(:,2:n);
PermitV=[PermitV,V(:,1)];
temp=d*PermitV;
t3=sum(sum(V.*temp));
E=0.5*(A*t1+A*t2+D*t3);%%%%%%% Calculate du/dt
function du=DeltaU(V,d,A,D)
[n,n]=size(V);
t1=repmat(sum(V,2)-1,1,n);
t2=repmat(sum(V,1)-1,n,1);
PermitV=V(:,2:n);
PermitV=[PermitV, V(:,1)];
t3=d*PermitV;
du=-1*(A*t1+A*t2+D*t3);%Check the validity of route
function [V1,CheckR]=RouteCheck(V)
[rows,cols]=size(V);
V1=zeros(rows,cols);
[XC,Order]=max(V);
for j=1:colsV1(Order(j),j)=1;
end
C=sum(V1);
R=sum(V1');
CheckR=sumsqr(C-R);% Calculate Initial Route Length
function L0=Initial_RouteLength(cities)
[r,c]=size(cities);
L0=0;
for i=2:cL0=L0+dist(cities(:,i-1)',cities(:,i));
end
% Calculate Final Route Length
function L=Final_RouteLength(V,cities)
[xxx,order]=max(V);
New=cities(:,order);
New=[New New(:,1)];
[rows,cs]=size(New);L=0;
for i=2:csL=L+dist(New(:,i-1)',New(:,i));
end% Give Path optimization plot
function PlotR(V,cities)
figure;cities=[cities cities(:,1)];[xxx,order]=max(V);
New=cities(:,order);
New=[New New(:,1)];subplot(1,2,1);
plot( cities(1,1), cities(2,1),'r*' );   %First city
hold on;
plot( cities(1,2), cities(2,2),'+' );    %Second city
hold on;
plot( cities(1,:), cities(2,:),'o-' ), xlabel('X axis'), ylabel('Y axis'), title('Original Route');
axis([0,1,0,1]);subplot(1,2,2);
plot( New(1,1), New(2,1),'r*' );   %First city
hold on;
plot( New(1,2), New(2,2),'+' );    %Second city
hold on;
plot(New(1,:),New(2,:),'o-');
title('TSP solution');
xlabel('X axis');ylabel('Y axis');
axis([0,1,0,1]);
axis on

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果ASA归因对接以及API接入

一、归因概要 广告归因&#xff0c;目的是用于衡量广告带来的激活用户的成本以及后续进一步的用户质量表现。 Apple Ads 广告平台是基于 App Store&#xff08;站内广告&#xff09;&#xff0c;同时属于自归因平台&#xff08;通常称为 SAN&#xff09;。这两个因素&#xff…

hhdb数据库介绍(9-18)

Oracle兼容性说明 数据类型兼容 本节主要介绍 HHDB Server与Oracle 数据库中数据类型的详细兼容对比信息。 比较项Oracle数据库数据类型HHDB Server数据类型对应项/替代项字符串/字符VARCHAR2( n )VARCHAR( n )字符串/字符NVARCHAR2( n )VARCHAR( n ) character set utf8字符…

服务器数据恢复—raid5阵列故障导致上层系统分区无法识别的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌DL380服务器&#xff0c;服务器中三块SAS硬盘组建了一组raid5阵列。服务器安装Windows Server操作系统&#xff0c;划分了3个分区&#xff0c;D分区存放数据库&#xff0c;E分区存放数据库备份。 服务器故障&#xff1a; RAID5阵列中有一…

STM32设计电流与温度监控python上位机监控平台设计

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代工业自动化和智能设备管理中&#xff0c;对电流和温度的实时监控是…

STM32F103ZET6快速创建工程

1.创建工程目录,点击进目录, 然后复制目录的路径 2.双击打开kile5, 然后点击project, 创建工程 3.找到刚才的目录, 然后加入工程 4.输入芯片 STM32F103ZE, 然后保存 5.勾选对应的初始文件 6.加入main.c函数 7.双击进入Source_code文件夹 , 然后加入User,进入User 8.加入main.c文…

GIS与Web开发结合的产物:WebGIS

WebGIS&#xff0c;其实是利用Web开发技术结合地理信息系统&#xff08;GIS&#xff09;的产物&#xff0c;它是一种通过Internet实现GIS交互操作和服务的最佳途径。 WebGIS通过图形化界面直观地呈现地理信息和特定数据&#xff0c;具有可扩展性和跨平台性。 它提供交互性&am…

Python模块、迭代器与正则表达式day10

1、Python模块 1.1模块的简介 在编写代码的时候&#xff0c;创建的.py文件就被称为一个模块 1.2模块的使用 想要在a文件里使用b文件的时候&#xff0c;只要在a文件中使用关键字import导入即可 1.2.2 from ...import...语句 导入模块可以使用import&#xff0c;如果只导入模…

调用 Xinference OpenAI接口时报错 Model not found in the model list, uid

错误如下, 请不要被错误吓住或蒙蔽双眼, 自己看最下面的报错内容 Traceback (most recent call last): File "C:\Users\HW\.conda\envs\aibot\Lib\site-packages\starlette\responses.py", line 259, in __call__ await wrap(partial(self.listen_for_disconn…

小红书内容推荐算法开发:利用API打造个性化用户体验

在这个内容为王的时代&#xff0c;个性化推荐算法成为了各大平台争夺用户注意力的利器。小红书&#xff0c;作为国内领先的内容分享社区&#xff0c;其丰富的用户生成内容&#xff08;UGC&#xff09;和独特的社区氛围&#xff0c;为推荐算法的开发提供了肥沃的土壤。本文将深入…

没钱买KEGG怎么办?REACTOME开源通路更强大

之前搜集免费生物AI插图时简单提到了通路数据库Reactome&#xff08;https://reactome.org/&#xff09;&#xff0c; 那些精美的生物插图只能算是该数据库附赠的小礼品&#xff0c;他的主要功能还是作为一个开源的通路数据库&#xff0c;为相关领域的研究者提供直观的可视化生…

ChatGPT学术专用版,一键润色纠错+中英互译+批量翻译PDF

ChatGPT academic项目是由中科院团队基于ChatGPT专属定制。论文润色、语法检查、中英互译、代码解释等可一键搞定&#xff0c;堪称科研神器。 功能介绍 我们以3.5版本为例&#xff0c;ChatGPT学术版总共分为五个区域&#xff1a;输入控制区、输出对话区、基础功能区、函数插件…

版本控制【Git Bash】【Gitee】

目录 一、什么是版本控制&#xff1f; 二、版本控制的种类&#xff1a; 1、本地版本控制 2、集中版本控制 3、分布式版本控制 三、下载Git Bash 四、Git Bash 配置 五、Git Bash使用 1、切换目录&#xff1a;cd 2.查看当前文件路径&#xff1a;pwd 3.列出当前目录下文件…

关于Java合并多个Excel中的数据【该数据不是常规列表】,并入库保存的方案

1. 背景 最近在使用RPA&#xff08;机器人流程自动化&#xff09;做数据采集的时候。发现那个RPA采集&#xff0c;一次只能采集相同格式的数据&#xff0c;然后入到Excel或者库中。由于院内系统的业务限制&#xff0c;导致采集的数据是多个Excel&#xff0c;并且我们这边的需求…

【进阶系列】python的模块

模块 创建一个 .py 文件&#xff0c;这个文件就称之为 一个模块 Module 如何使用 import 想要B.py文件中&#xff0c;使用A.py文件&#xff0c;只需要在B.py文件中使用关键字import导入即可。 import A# 若A是一个包的话&#xff0c;可以这样写 import A.函数名from impor…

使用Web Workers提升JavaScript的并行处理能力

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的…

从零开始使用GOT-OCR2.0——多模态通用型OCR(非常具有潜力的开源OCR项目):项目环境安装配置 + 测试使用

在之前精读了这个多模态的OCR项目论文&#xff0c;理解了其基本的模型架构&#xff0c;论文精读地址&#xff1a; 【论文精读】GOT-OCR2.0源码论文——打破传统OCR流程的多模态视觉-语言大模型架构&#xff1a;预训练VitDet 视觉模型 阿里通义千问Qwen语言模型-CSDN博客 本文在…

【Golang】——Gin 框架中的表单处理与数据绑定

在 Web 应用开发中&#xff0c;表单是用户与服务器交互的重要手段。Gin 框架对表单处理提供了高效便捷的支持&#xff0c;包括数据绑定、验证等功能。在本篇博客中&#xff0c;我们将详细介绍如何使用 Gin 框架处理表单数据&#xff0c;涵盖基础操作与进阶技巧&#xff0c;帮助…

删除k8s 或者docker运行失败的脚本

vi delete_exited_containers.sh#!/bin/bash# 列出所有停止的容器并存储到数组 list_exited_containers() {echo -e "\nStopped containers:"containers()# 获取停止的容器信息并存入数组while IFS read -r line; docontainers("$line")done < <(do…

Linux(命令格式详细+字符集 图片+大白话)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

Clip结合Faiss+Flask简易版文搜图服务

一、实现 使用目录结构&#xff1a; templates ---upload.html faiss_app.py 前端代码&#xff1a;upload.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&quo…