位置: IT常识 - 正文

【模糊神经网络】基于simulink的模糊神经网络控制器设计(模糊数学神经网络)

编辑:rootadmin
【模糊神经网络】基于simulink的模糊神经网络控制器设计 1.软件版本

推荐整理分享【模糊神经网络】基于simulink的模糊神经网络控制器设计(模糊数学神经网络),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:模糊rbf神经网络,模糊神经网络训练数据量多少合适,模糊神经网络原理,模糊神经网络和神经网络区别,模糊神经网络pid,模糊神经网络应用,模糊神经网络和神经网络区别,模糊神经网络和神经网络区别,内容如对您有帮助,希望把文章链接给更多的朋友!

MATLAB2010b

2.模糊神经网络理论概述

        由于模糊控制是建立在专家经验的基础之上的,但这有很大的局限性,而人工神经网络可以充分逼近任意复杂的时变非线性系统,采用并行分布处理方法,可学习和自适应不确定系统。利用神经网络可以帮助模糊控制器进行学习,模糊逻辑可以帮助神经网络初始化及加快学习过程。通常神经网络的基本构架如下所示:

      整个神经网络结构为五层,其中第一层为“输入层“,第二层为“模糊化层”,第三层为“模糊推理层”,第四层为“归一化层”,第五层为“解模糊输出层”。 

      第一层为输入层,其主要包括两个节点,所以第一层神经网络的输入输出可以用如下的式子表示:

        第二层为输入变量的语言变量值,通常是模糊集中的n个变量,它的作用是计算各输入分量属于各语言变量值模糊集合的隶属度。用来确定输入在不同的模糊语言值对应的隶属度,以便进行模糊推理,如果隶属函数为高斯函数,那么其表达式为:

其中变量的具体含义和第一层节点的变量含义相同。

第三层是比较关键的一层,即模糊推理层,这一层的每个节点代表一条模糊规则,其每个节点的输出值表示每条模糊规则的激励强度。该节点的表达式可用如下的式子表示:

 

第四层为归一化层,其输出是采用了Madmdani模糊规则,该层的表达式为: 

【模糊神经网络】基于simulink的模糊神经网络控制器设计(模糊数学神经网络)

第五层是模糊神经网络的解模糊层,即模糊神经网络的清晰化. 

3.算法的simulink建模

        为了对比加入FNN控制器后的性能变化,我们同时要对有FNN控制器的模型以及没有FNN控制器的模型进行仿真,仿真结果如下所示:

        非FNN控制器的结构:

其仿真结果如下所示:

FNN控制器的结构:

    其仿真结果如下所示:

前面的是训练阶段,后面的为实际的输出,为了能够体现最后的性能,我们将两个模型的最后输出进行对比,得到的对比结果所示:

   从上面的仿真结果可知,PID的输出值范围降低了很多,性能得到了进一步提升。

调速TS模型,该模型最后的仿真结果如下所示:

    从上面的仿真结果可知,采用FNN控制器后,其PID的输出在一个非常小的范围之内进行晃动,整个系统的性能提高了80%。这说明采用模糊神经网络后的系统具有更高的性能和稳定性。

4.部分程序

Mamdani模糊控制器的S函数

function [out,Xt,str,ts] = Sfunc_fnn_Mamdani(t,Xt,u,flag,Learn_rate,coff,lamda,Number_signal_in,Number_Fuzzy_rules,x0,T_samples)%输入定义% t,Xt,u,flag :S函数固定的几个输入脚% Learn_rate :学习度% coff :用于神经网络第一层的参数调整% lamda :神经网络的学习遗忘因子% Number_signal_in :输入的信号的个数 % Number_Fuzzy_rules :模糊控制规则数% T_samples :模块采样率%输入信号的个数 Number_inport = Number_signal_in;%整个系统的输入x,误差输入e,以及训练指令的数组的长度ninps = Number_inport+1+1; NumRules = Number_Fuzzy_rules;Num_out1 = 3*Number_signal_in*Number_Fuzzy_rules + ((Number_signal_in+1)*NumRules)^2 + (Number_signal_in+1)*NumRules;Num_out2 = 3*Number_signal_in*Number_Fuzzy_rules + (Number_signal_in+1)*NumRules;%S函数第一步,参数的初始化if flag == 0out = [0,Num_out1+Num_out2,1+Num_out1+Num_out2,ninps,0,1,1]; str = []; ts = T_samples; Xt = x0;%S函数的第二步,状态的计算elseif flag == 2%外部模块的输出三个参数变量输入x,误差输入e,以及训练指令的数组的长度x = u(1:Number_inport);%输入xe = u(Number_inport+1:Number_inport+1);%误差输入elearning = u(Number_inport+1+1);%训练指令的数组的长度%1的时候为正常工作状态if learning == 1 Feedfor_phase2; %下面定义在正常的工作状态中,各个网络层的工作%层1:In1 = x*ones(1,Number_Fuzzy_rules);Out1 = 1./(1 + (abs((In1-mean1)./sigma1)).^(2*b1));%层2:precond = Out1'; Out2 = prod(Out1)';S_2 = sum(Out2);%层3:if S_2~=0 Out3 = Out2'./S_2;else Out3 = zeros(1,NumRules);end %层4:Aux1 = [x; 1]*Out3;%训练数据a = reshape(Aux1,(Number_signal_in+1)*NumRules,1); %参数学习P = (1./lamda).*(P - P*a*a'*P./(lamda+a'*P*a));ThetaL4 = ThetaL4 + P*a.*e;ThetaL4_mat = reshape(ThetaL4,Number_signal_in+1,NumRules);%错误反馈e3 = [x' 1]*ThetaL4_mat.*e;denom = S_2*S_2;%下面自适应产生10个规则的模糊控制器Theta32 = zeros(NumRules,NumRules);if denom~=0 for k1=1:NumRules for k2=1:NumRules if k1==k2 Theta32(k1,k2) = ((S_2-Out2(k2))./denom).*e3(k2); else Theta32(k1,k2) = -(Out2(k2)./denom).*e3(k2); end end endende2 = sum(Theta32,2);%层一Q = zeros(Number_signal_in,Number_Fuzzy_rules,NumRules); for i=1:Number_signal_in for j=1:Number_Fuzzy_rules for k=1:NumRules if Out1(i,j)== precond(k,i) && Out1(i,j)~=0 Q(i,j,k) = (Out2(k)./Out1(i,j)).*e2(k); else Q(i,j,k) = 0; end end end endTheta21 = sum(Q,3);%自适应参数调整 if isempty(find(In1==mean1))deltamean1 = Theta21.*(2*b1./(In1-mean1)).*Out1.*(1-Out1);deltab1 = Theta21.*(-2).*log(abs((In1-mean1)./sigma1)).*Out1.*(1-Out1);deltasigma1 = Theta21.*(2*b1./sigma1).*Out1.*(1-Out1); dmean1 = Learn_rate*deltamean1 + coff*dmean1;mean1 = mean1 + dmean1;dsigma1 = Learn_rate*deltasigma1 + coff*dsigma1;sigma1 = sigma1 + dsigma1;db1 = Learn_rate*deltab1 + coff*db1;b1 = b1 + db1;for i=1:Number_Fuzzy_rules-1 if ~isempty(find(mean1(:,i)>mean1(:,i+1))) for i=1:Number_signal_in [mean1(i,:) index1] = sort(mean1(i,:)); sigma1(i,:) = sigma1(i,index1); b1(i,:) = b1(i,index1); end endendend%完成参数学习过程%并保存参数学习结果Xt = [reshape(mean1,Number_signal_in*Number_Fuzzy_rules,1);reshape(sigma1,Number_signal_in*Number_Fuzzy_rules,1);reshape(b1,Number_signal_in*Number_Fuzzy_rules,1);reshape(P,((Number_signal_in+1)*NumRules)^2,1);ThetaL4;reshape(dmean1,Number_signal_in*Number_Fuzzy_rules,1);reshape(dsigma1,Number_signal_in*Number_Fuzzy_rules,1);reshape(db1,Number_signal_in*Number_Fuzzy_rules,1);dThetaL4;];endout=Xt;%S函数的第三步,定义各个网络层的数据转换elseif flag == 3Feedfor_phase;%定义整个模糊神经网络的各个层的数据状态%第一层x = u(1:Number_inport);In1 = x*ones(1,Number_Fuzzy_rules);%第一层的输入Out1 = 1./(1 + (abs((In1-mean1)./sigma1)).^(2*b1));%第一层的输出,这里,这个神经网络的输入输出函数可以修改%第一层precond = Out1'; Out2 = prod(Out1)';S_2 = sum(Out2);%计算和%第三层if S_2~=0 Out3 = Out2'./S_2;else Out3 = zeros(1,NumRules);%为了在模糊控制的时候方便系统的运算,需要对系统进行归一化处理end%第四层Aux1 = [x; 1]*Out3;a = reshape(Aux1,(Number_signal_in+1)*NumRules,1);%控制输出%第五层,最后结果输出outact = a'*ThetaL4;%最后的出处结果out = [outact;Xt]; elseout = [];end

TS模糊控制器的S函数

function [out,Xt,str,ts] = Sfunc_fnn_TS(t,Xt,u,flag,Learn_rate,coffa,lamda,r,vigilance,coffb,arate,Number_signal_in,Number_Fuzzy_rules,x0,Xmins,Data_range,T_samples)%输入定义% t,Xt,u,flag :S函数固定的几个输入脚% Learn_rate :学习度% coffb :用于神经网络第一层的参数调整% lamda :神经网络的学习遗忘因子% Number_signal_in :输入的信号的个数 % Number_Fuzzy_rules :模糊控制规则数% T_samples :模块采样率 Data_in_numbers = Number_signal_in;Data_out_numbers = 1;%整个系统的输入x,误差输入e,以及训练指令的数组的长度ninps = Data_in_numbers+Data_out_numbers+1; Number_Fuzzy_rules2 = Number_Fuzzy_rules;Num_out1 = 2*Number_signal_in*Number_Fuzzy_rules + ((Number_signal_in+1)*Number_Fuzzy_rules2)^2 + (Number_signal_in+1)*Number_Fuzzy_rules2 + 1;Num_out2 = 2*Number_signal_in*Number_Fuzzy_rules + (Number_signal_in+1)*Number_Fuzzy_rules2;%S函数第一步,参数的初始化if flag == 0out = [0,Num_out1+Num_out2,1+Num_out1+Num_out2,ninps,0,1,1]; str = []; ts = T_samples; Xt = x0;%S函数的第二步,状态的计算elseif flag == 2x1 = (u(1:Data_in_numbers) - Xmins)./Data_range;x = [ x1; ones(Data_in_numbers,1) - x1]; e = u(Data_in_numbers+1:Data_in_numbers+Data_out_numbers);learning = u(Data_in_numbers+Data_out_numbers+1);%1的时候为正常工作状态if learning == 1 NumRules = Xt(1);NumInTerms = NumRules;Feedfor_phase; %最佳参数搜索New_nodess = 0;reass = 0;Rst_nodes = []; rdy_nodes = [];while reass == 0 && NumInTerms<Number_Fuzzy_rules %搜索最佳点 N = size(w_a,2); node_tmp = x * ones(1,N); A_AND_w = min(node_tmp,w_a); Sa = sum(abs(A_AND_w)); Ta = Sa ./ (coffb + sum(abs(w_a))); %节点归零 Ta(Rst_nodes) = zeros(1,length(Rst_nodes)); Ta(rdy_nodes) = zeros(1,length(rdy_nodes)); [Tamax,J] = max(Ta); w_J = w_a(:,J); xa = min(x,w_J); %最佳节点测试 if sum(abs(xa))./Number_signal_in >= vigilance, reass = 1; w_a(:,J) = arate*xa + (1-arate)*w_a(:,J); elseif sum(abs(xa))/Number_signal_in < vigilance, reass = 0; Rst_nodes = [Rst_nodes J ]; end if length(Rst_nodes)== N || length(rdy_nodes)== N w_a = [w_a x]; New_nodess = 1; reass = 0; endend; %节点更新u2 = w_a(1:Number_signal_in,:);v2 = 1 - w_a(Number_signal_in+1:2*Number_signal_in,:);NumInTerms = size(u2,2);NumRules = NumInTerms;if New_nodess == 1 ThetaL5 = [ThetaL5; zeros(Number_signal_in+1,1)]; dThetaL5 = [dThetaL5; zeros(Number_signal_in+1,1)]; P = [ P zeros((Number_signal_in+1)*(NumRules-1),Number_signal_in+1); zeros(Number_signal_in+1,(Number_signal_in+1)*(NumRules-1)) 1e6*eye(Number_signal_in+1); ]; du2 = [du2 zeros(Number_signal_in,1);]; dv2 = [dv2 zeros(Number_signal_in,1);];end%层2:x1_tmp = x1;x1_tmp2 = x1_tmp*ones(1,NumInTerms);Out2 = 1 - check(x1_tmp2-v2,r) - check(u2-x1_tmp2,r);%层3: Out3 = prod(Out2); S_3 = sum(Out3);%层4:if S_3~=0 Out4 = Out3/S_3;else Out4 = zeros(1,NumRules); endAux1 = [x1_tmp; 1]*Out4;a = reshape(Aux1,(Number_signal_in+1)*NumRules,1);%层五P = (1./lamda).*(P - P*a*a'*P./(lamda+a'*P*a));ThetaL5 = ThetaL5 + P*a.*e;ThetaL5_tmp = reshape(ThetaL5,Number_signal_in+1,NumRules);%错误反馈%层4:e4 = [x1_tmp' 1]*ThetaL5_tmp.*e;denom = S_3*S_3;%层3:Theta43 = zeros(NumRules,NumRules);if denom~=0 for k1=1:NumRules for k2=1:NumRules if k1==k2 Theta43(k1,k2) = ((S_3-Out3(k2))./denom).*e4(k2); else Theta43(k1,k2) = -(Out3(k2)./denom).*e4(k2); end end endende3 = sum(Theta43,2);%层2Q = zeros(Number_signal_in,NumInTerms,NumRules); for i=1:Number_signal_in for j=1:NumInTerms for k=1:NumRules if j==k && Out2(i,j)~=0 Q(i,j,k) = (Out3(k)./Out2(i,j)).*e3(k); else Q(i,j,k) = 0; end end end endThetass = sum(Q,3);Thetavv = zeros(Number_signal_in,NumInTerms);Thetauu = zeros(Number_signal_in,NumInTerms);for i=1:Number_signal_in for j=1:NumInTerms if ((Out2(i)-v2(i,j))*r>=0) && ((Out2(i)-v2(i,j))*r<=1) Thetavv(i,j) = r; end if ((u2(i,j)-Out2(i))*r>=0) && ((u2(i,j)-Out2(i))*r<=1) Thetauu(i,j) = -r; end endend%根据学习结果辨识参数计算e3_tmp = (e3*ones(1,Number_signal_in))';du2 = Learn_rate*Thetavv.*e3_tmp.*Thetass + coffa*du2;dv2 = Learn_rate*Thetauu.*e3_tmp.*Thetass + coffa*dv2;v2 = v2 + du2;u2 = u2 + dv2;if ~isempty(find(u2>v2)) for i=1:Number_signal_in for j=1:NumInTerms if u2(i,j) > v2(i,j) temp = v2(i,j); v2(i,j) = u2(i,j); u2(i,j) = temp; end end endendif ~isempty(find(u2<0)) || ~isempty(find(v2>1)) for i=1:Number_signal_in for j=1:NumInTerms if u2(i,j) < 0 u2(i,j) = 0; end if v2(i,j) > 1 v2(i,j) = 1; end end endend%WA由学习结果更新w_a = [u2; 1-v2];%上面的结果完成学习过程Xt1 = [NumRules;reshape(w_a,2*Number_signal_in*NumInTerms,1);reshape(P,((Number_signal_in+1)*NumRules)^2,1); ThetaL5;reshape(du2,Number_signal_in*NumInTerms,1);reshape(dv2,Number_signal_in*NumInTerms,1);dThetaL5;];ns1 = size(Xt1,1);Xt = [Xt1; zeros(Num_out1+Num_out2-ns1,1);]; end out=Xt;%S函数的第三步,定义各个网络层的数据转换elseif flag == 3NumRules = Xt(1);NumInTerms = NumRules;Feedfor_phase; u2 = w_a(1:Number_signal_in,:);v2 = 1 - w_a(Number_signal_in+1:2*Number_signal_in,:);%层1输出x1 = (u(1:Data_in_numbers) - Xmins)./Data_range; %层2输出x1_tmp = x1; x1_tmp2 = x1_tmp*ones(1,NumInTerms); Out2 = 1 - check(x1_tmp2-v2,r) - check(u2-x1_tmp2,r);%层3输出Out3 = prod(Out2); S_3 = sum(Out3);%层4输出.if S_3~=0 Out4 = Out3/S_3;else Out4 = zeros(1,NumRules); end%层5输出Aux1 = [x1_tmp; 1]*Out4;a = reshape(Aux1,(Number_signal_in+1)*NumRules,1);outact = a'*ThetaL5;out = [outact;Xt]; elseout = [];endfunction y = check(s,r);rows = size(s,1);columns = size(s,2);y = zeros(rows,columns);for i=1:rows for j=1:columns if s(i,j).*r>1 y(i,j) = 1; elseif 0 <= s(i,j).*r && s(i,j).*r <= 1 y(i,j) = s(i,j).*r; elseif s(i,j).*r<0 y(i,j) = 0; end endendreturn

A05-04

本文链接地址:https://www.jiuchutong.com/zhishi/300067.html 转载请保留说明!

上一篇:vue项目安装使用element_UI(使用vue要安装什么软件)

下一篇:数据安全-数据分类分级方案设计(数据安全数据目录)

  • 支付宝怎么预约新冠疫苗接种第一针(支付宝怎么预约离婚登记)

    支付宝怎么预约新冠疫苗接种第一针(支付宝怎么预约离婚登记)

  • 苹果13深色模式怎么设置(苹果13深色模式和浅色模式哪个好)

    苹果13深色模式怎么设置(苹果13深色模式和浅色模式哪个好)

  • word剪贴板在哪里打开(word2010剪贴板)

    word剪贴板在哪里打开(word2010剪贴板)

  • 小米手环4闹钟叫不醒(小米手环4闹钟十分钟响一次)

    小米手环4闹钟叫不醒(小米手环4闹钟十分钟响一次)

  • 京东怎么分期买手机(京东怎么分期买东西)

    京东怎么分期买手机(京东怎么分期买东西)

  • 拼多多选错类目还能经营吗(拼多多选错类目有什么影响)

    拼多多选错类目还能经营吗(拼多多选错类目有什么影响)

  • 盒马鲜生可以用微信支付吗(盒马鲜生可以用支付宝支付吗)

    盒马鲜生可以用微信支付吗(盒马鲜生可以用支付宝支付吗)

  • 为什么快捷指令里找不到微信(为什么快捷指令没有声音)

    为什么快捷指令里找不到微信(为什么快捷指令没有声音)

  • hw050450c01对应哪款手机(hw05200c01)

    hw050450c01对应哪款手机(hw05200c01)

  • 华为荣耀20怎么调节短信铃声(华为荣耀20怎么刷机强行解锁)

    华为荣耀20怎么调节短信铃声(华为荣耀20怎么刷机强行解锁)

  • 抖音怎么拍九宫格不一样的视频(抖音怎么拍九宫格)

    抖音怎么拍九宫格不一样的视频(抖音怎么拍九宫格)

  • 大王卡什么意思 (大王卡怎么办理)

    大王卡什么意思 (大王卡怎么办理)

  • tcp是什么层协议(tcp属于什么层)

    tcp是什么层协议(tcp属于什么层)

  • 爱奇艺互动播放是什么(爱奇艺互动播放怎么使用)

    爱奇艺互动播放是什么(爱奇艺互动播放怎么使用)

  • 为什么苹果下载不了迅雷(为什么苹果下载软件需要付费验证)

    为什么苹果下载不了迅雷(为什么苹果下载软件需要付费验证)

  • 咻电怎么归还(咻电怎么归还充电宝)

    咻电怎么归还(咻电怎么归还充电宝)

  • 腾讯地图如何标记地点(腾讯地图如何标注自己店铺位置免费)

    腾讯地图如何标记地点(腾讯地图如何标注自己店铺位置免费)

  • ios13信号差怎么办(ios13信号差怎么解决)

    ios13信号差怎么办(ios13信号差怎么解决)

  • 解压密码怎么用(html解压密码怎么用)

    解压密码怎么用(html解压密码怎么用)

  • 老年机打电话无法连接(老年机打电话无法连接是什么意思)

    老年机打电话无法连接(老年机打电话无法连接是什么意思)

  • 怎么删除小爱同学的搜索栏(怎么删除小爱同学)

    怎么删除小爱同学的搜索栏(怎么删除小爱同学)

  • oppor9多少骁龙处理器(oppor9sk骁龙多少)

    oppor9多少骁龙处理器(oppor9sk骁龙多少)

  • 信微加入黑名单可以返回吗(微信加入黑名单好友)

    信微加入黑名单可以返回吗(微信加入黑名单好友)

  • 苹果实况怎么拍(苹果实况怎么拍出来的)

    苹果实况怎么拍(苹果实况怎么拍出来的)

  • 鹤顶兰的养殖方法(鹤顶兰的养殖方法和管理)

    鹤顶兰的养殖方法(鹤顶兰的养殖方法和管理)

  • 帝国CMS远程保存图片的方法(帝国cms文件夹介绍)

    帝国CMS远程保存图片的方法(帝国cms文件夹介绍)

  • 减免税款会计分录
  • 服务外包行业要交社保吗
  • 代收的水资源税收入是否计入企业所得税
  • 门诊医保报销发票
  • 小规模差额征税全额开票和差额开票
  • 通货膨胀的含义及通货膨胀率的计算
  • 五险一金计提缴纳分录
  • 费用确认的时点
  • 非货币性资产含义
  • 为取得固定资产而发生的什么支出可计入固定资产成本
  • 买车时的保险包括哪些费用,多少钱
  • 税务局代开的增值税专票可以红冲吗?
  • 外币应收帐款汇兑损益现流附表
  • 增值税预缴税需要申报吗
  • 公司成本票不够交税多少
  • 商业保险税前扣除限额
  • 车船税发票丢了咋办
  • 转移性支出与转移性收入相对应主要包括
  • 筹备期间的开办企业是指
  • 住房公积金业务挂起
  • 我的初级备考日记--你都没坚持,还谈什么未来
  • 现金折扣通过财务费用核算
  • 研发成功的产品卖出去怎么做账
  • 定期定额征收的个体户怎么报税
  • mac版chrome浏览器无法上网
  • 发生利息收入的分录
  • thinkphp yii
  • php源码怎么上传到服务器
  • 电脑麦克风对方听不到声音怎么办
  • 手相算命图解大全女
  • 研发费用加计扣除75%还是100%
  • 工业企业销售收入和产值,税金比例
  • 零售企业进货退税政策
  • CUDA(10.2)+PyTorch安装加配置 详细完整教程
  • 原材料的盘盈与盘亏的会计处理
  • 用vue做的登录界面
  • flex布局适用于哪些场景
  • php接收ajax请求
  • 罚款支出计入什么
  • 1.2版本的oppo手机解锁方法
  • 爬虫基本原理有哪些
  • php自定义表单
  • 注销营业执照的电话号码是多少
  • 财务章有几种样式
  • 房屋租赁时需要交税吗
  • 个税手续费返还计入哪个科目
  • 我向银行借钱我是贷方还是借方
  • 医院累计折旧会计分录
  • sqlserver实现分页查询
  • 增值税药品发票明细
  • 股东撤资如何退还资金,用途写什么
  • 收到境外支付的咨询费免税吗
  • 个体生产经营所得税
  • 给公司股东分红的账务处理
  • 购买单位什么意思
  • 减免所得税优惠政策
  • 事业单位小规模纳税人咨询服务的税率
  • 会议中发生的相关事件
  • 过滤重复字符串
  • win7开机显示黑屏
  • 电脑一直显示windowsxp怎么办
  • 右键无法新建wps
  • cocos内存管理
  • opengl绘制ui
  • cocos2dx-3.1.1 win8+eclipse+android开发 初学者容易迷惑的两个问题
  • exit(1)和return的区别
  • 批处理/s
  • 关于javascript
  • jquery开发项目
  • document.all.value
  • javascript零基础入门
  • javascript例题
  • 果断收藏9个Javascript代码高亮脚本
  • 内蒙古电子税务局app官方下载
  • 广东etc政策
  • 知道纳税人识别号怎么转账
  • 锂电池缴纳消费增值税吗
  • 水上公安分局
  • 印花税核算有两种情况,是如何处理的?
  • 湖南增值税起征点
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设