GPOPS-II教程(3): 航天器最优控制问题

文章目录

  • 问题描述
  • GPOPS代码
    • `main function`
    • `continuous function`
    • `endpoint function`
    • 完整代码
    • 代码仿真结果
  • 最后

问题描述

例子出自论文 Direct solution of nonlinear optimal control problems using quasilinearization and Chebyshev polynomials(DOI:10.1016/S0016-0032(02)00028-5) Section 5.2. Example 2: Rigid asymmetric spacecraft

题目如下:

一个刚体非对称航天器控制问题,其状态方程为

{ ω ˙ 1 = − I 3 − I 2 I 1 ω 2 ω 3 + u 1 I 1 , ω ˙ 2 = − I 1 − I 3 I 2 ω 1 ω 3 + u 2 I 2 , ω ˙ 3 = − I 2 − I 1 I 3 ω 1 ω 2 + u 3 I 3 , (1) \left \{ \begin{matrix} \dot{\omega}_1 = -\frac{I_3-I_2}{I_1} \omega_2 \omega_3 + \frac{u_1}{I_1}, \\ \dot{\omega}_2 = -\frac{I_1-I_3}{I_2} \omega_1 \omega_3 + \frac{u_2}{I_2}, \\ \dot{\omega}_3 = -\frac{I_2-I_1}{I_3} \omega_1 \omega_2 + \frac{u_3}{I_3}, \end{matrix} \right. \tag{1} ω˙1=I1I3I2ω2ω3+I1u1,ω˙2=I2I1I3ω1ω3+I2u2,ω˙3=I3I2I1ω1ω2+I3u3,(1)

式中, ω 1 \omega_1 ω1 ω 2 \omega_2 ω2 ω 3 \omega_3 ω3 为航天器的角速度。

控制量为 u 1 u_1 u1 u 2 u_2 u2 u 3 u_3 u3,目标函数为

J = 0.5 ∫ 0 100 ( u 1 2 + u 2 2 + u 3 2 ) d t . (2) J = 0.5 \int_{0}^{100}(u_1^2+u_2^2+u_3^2) \text{d}t. \tag{2} J=0.50100(u12+u22+u32)dt.(2)

其余参数为

ω 1 ( 0 ) = 0.01 r/s , ω 1 ( t f ) = 0 r/s , ω 2 ( 0 ) = 0.005 r/s , ω 2 ( t f ) = 0 r/s , ω 3 ( 0 ) = 0.001 r/s , ω 3 ( t f ) = 0 r/s , I 1 = 86.24 kg m 2 , I 2 = 85.07 kg m 2 , I 3 = 113.59 kg m 2 . (3) \begin{array}{lll} \omega_1(0)\ = 0.01\ \text{r/s} &, \ & \omega_1(t_f) = 0 \ \text{r/s}, \\ \omega_2(0)\ = 0.005\ \text{r/s} &, \ & \omega_2(t_f) = 0 \ \text{r/s}, \\ \omega_3(0)\ = 0.001\ \text{r/s} &, \ & \omega_3(t_f) = 0 \ \text{r/s}, \\ I_1=86.24 \ \text{kg m}^2 \ &,\ & I_2=85.07 \ \text{kg m}^2,\\ I_3=113.59 \ \text{kg m}^2. \end{array} \tag{3} ω1(0) =0.01 r/sω2(0) =0.005 r/sω3(0) =0.001 r/sI1=86.24 kg m2 I3=113.59 kg m2., , , , ω1(tf)=0 r/s,ω2(tf)=0 r/s,ω3(tf)=0 r/s,I2=85.07 kg m2,(3)

GPOPS代码

main function

首先设置GPOPS-II的参数。式 ( 3 ) (3) (3)给出了所有用到的参数,按照式 ( 3 ) (3) (3)写出代码即可。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 功能描述:刚体非对称航天器控制问题
% 文件名解释:mainSpacecraftOCP.m 中,main 代表 主函数,
%             Spacecraft 代表 航天器,
%             OCP 代表 最优控制问题
% 作者:Lei Lie
% 时间:2024/06/22
% 版本:1.0
% - 完成了代码框架的初始搭建
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear;close all;
tic;
%% 01.初始参数设置
%-------------------------------------------------------------------------%
%----------------------- 设置问题的求解边界 ------------------------------%
%-------------------------------------------------------------------------%
% 设置时间
t0 = 0;
tf = 100;
% 设置状态量初值
w10 = .01;
w20 = .005;
w30 = .001;
% 设置状态量边界条件
w1_max = 1;
w1_min = 0;
w2_max = 1;
w2_min = 0;
w3_max = 1;
w3_min = 0;
% 设置控制量初值
u10 = -.009;
u20 = -.004;
u30 = -.001;
% 设置控制量边界条件
u1_max = 0;
u1_min = -.01;
u2_max = 0;
u2_min = -.01;
u3_max = 0;
u3_min = -.01;
% 设置静态参数
auxdata.I1 = 86.24;
auxdata.I2 = 85.07;
auxdata.I3 = 113.59;
% 设置不等式约束边界条件(路径约束)
path_max = .002;
path_min = 0;%% 02.边界条件设置
%-------------------------------------------------------------------------%
%------------------------ 将求解边界设置于问题中 -------------------------%
%-------------------------------------------------------------------------%
bounds.phase.initialtime.lower  = t0; 
bounds.phase.initialtime.upper  = t0;
bounds.phase.finaltime.lower    = tf; 
bounds.phase.finaltime.upper    = tf;
bounds.phase.initialstate.lower = [w10 w20 w30]; 
bounds.phase.initialstate.upper = [w10 w20 w30];
bounds.phase.state.lower        = [w1_min w2_min w3_min]; 
bounds.phase.state.upper        = [w1_max w2_max w3_max];
bounds.phase.finalstate.lower   = [0 0 0];
bounds.phase.finalstate.upper   = [0 0 0];
bounds.phase.control.lower      = [u1_min u2_min u3_min]; 
bounds.phase.control.upper      = [u1_max u2_max u3_max];
bounds.phase.integral.lower     = 0; 
bounds.phase.integral.upper     = 10000;%% 03.初值猜测
%-------------------------------------------------------------------------%
%------------------------------- 初值猜想 --------------------------------%
%-------------------------------------------------------------------------%
guess.phase.time     = [t0; tf]; 
guess.phase.state    = [[w10 w20 w30];[0 0 0]];
guess.phase.control  = [[u10 u20 u30];[u10 u20 u30]];
guess.phase.integral = 100;%% 04.设置GPOPS求解器参数
%-------------------------------------------------------------------------%
%---------------------------- 设置求解器参数 -----------------------------%        
%-------------------------------------------------------------------------%
setup.name = 'Spacecraft-OCP';
setup.functions.continuous  = @socpContinuous;
setup.functions.endpoint   	= @socpEndpoint;
setup.bounds                = bounds;
setup.guess                 = guess;
setup.auxdata               = auxdata;
setup.nlp.solver            = 'ipopt';
setup.derivatives.supplier  = 'sparseCD';
setup.derivatives.derivativelevel = 'second';
setup.mesh.method           = 'hp1';
setup.mesh.tolerance        = 1e-6;
setup.mesh.maxiteration     = 45;
setup.mesh.colpointsmax     = 4;
setup.mesh.colpointsmin     = 10;
setup.mesh.phase.fraction   = 0.1*ones(1,10);
setup.mesh.phase.colpoints  = 4*ones(1,10);
setup.method = 'RPMintegration';%% 05.求解
%-------------------------------------------------------------------------%
%----------------------- 使用 GPOPS2 求解最优控制问题 --------------------%
%-------------------------------------------------------------------------%
output = gpops2(setup);
solution = output.result.solution;
toc;

把结果画出来,代码如下。

%% 06.画图
t = solution.phase.time(:,1);
w1 = solution.phase.state(:,1);
w2 = solution.phase.state(:,2);
w3 = solution.phase.state(:,3);
u1 = solution.phase.control(:,1);
u2 = solution.phase.control(:,2);
u3 = solution.phase.control(:,3);figure('Color',[1,1,1]);
plot(t,w1,'-','LineWidth',1.5);hold on;
plot(t,w2,'-.','LineWidth',1.5);
plot(t,w3,'--','LineWidth',1.5);
xlabel('Time',...'FontWeight','bold');
ylabel('States',...'FontWeight','bold');
legend('w1','w2','w3',...'LineWidth',1,...'EdgeColor',[1,1,1],...'Orientation','horizontal',...'Position',[0.5,0.93,0.40,0.055]);
set(gca,'FontName','Times New Roman',...'FontSize',15,...'LineWidth',1.3);
print -dpng spacecraft_ocp_state.pngfigure('Color',[1,1,1]);
plot(t,u1,'-','LineWidth',1.5);hold on;
plot(t,u2,'-.','LineWidth',1.5);
plot(t,u3,'--','LineWidth',1.5);
xlabel('Time',...'FontWeight','bold');
ylabel('Control',...'FontWeight','bold');
legend('u1','u2','u3',...'LineWidth',1,...'EdgeColor',[1,1,1],...'Orientation','horizontal',...'Position',[0.5,0.93,0.40,0.055]);
set(gca,'FontName','Times New Roman',...'FontSize',15,...'LineWidth',1.3);
print -dpng spacecraft_ocp_control.png

continuous function

现在写动力学方程,再把式 ( 1 ) (1) (1)重新写一遍,放在这里。
{ ω ˙ 1 = − I 3 − I 2 I 1 ω 2 ω 3 + u 1 I 1 , ω ˙ 2 = − I 1 − I 3 I 2 ω 1 ω 3 + u 2 I 2 , ω ˙ 3 = − I 2 − I 1 I 3 ω 1 ω 2 + u 3 I 3 , \left \{ \begin{matrix} \dot{\omega}_1 = -\frac{I_3-I_2}{I_1} \omega_2 \omega_3 + \frac{u_1}{I_1}, \\ \dot{\omega}_2 = -\frac{I_1-I_3}{I_2} \omega_1 \omega_3 + \frac{u_2}{I_2}, \\ \dot{\omega}_3 = -\frac{I_2-I_1}{I_3} \omega_1 \omega_2 + \frac{u_3}{I_3}, \end{matrix} \right. ω˙1=I1I3I2ω2ω3+I1u1,ω˙2=I2I1I3ω1ω3+I2u2,ω˙3=I3I2I1ω1ω2+I3u3,
那么在代码中可以这么写:

dw1 = -((I3-I2)/I1) .* w2 .* w3 + u1 ./ I1;
dw2 = -((I1-I3)/I2) .* w1 .* w3 + u2 ./ I2;
dw3 = -((I2-I1)/I2) .* w1 .* w2 + u3 ./ I3;

性能指标的形式为
J = 0.5 ∫ 0 100 ( u 1 2 + u 2 2 + u 3 2 ) d t . J = 0.5 \int_{0}^{100}(u_1^2+u_2^2+u_3^2) \text{d}t. J=0.50100(u12+u22+u32)dt.
对应的代码如下。

phaseout.integrand = 0.5*(u1.^2 + u2.^2 + u3.^2);

那么,continues function的完整代码如下。

function phaseout = socpContinuous(input)w1 = input.phase.state(:,1);w2 = input.phase.state(:,2);w3 = input.phase.state(:,3);u1 = input.phase.control(:,1);u2 = input.phase.control(:,2);u3 = input.phase.control(:,3);I1 = input.auxdata.I1;I2 = input.auxdata.I2;I3 = input.auxdata.I3;dw1 = -((I3-I2)/I1) .* w2 .* w3 + u1 ./ I1;dw2 = -((I1-I3)/I2) .* w1 .* w3 + u2 ./ I2;dw3 = -((I2-I1)/I2) .* w1 .* w2 + u3 ./ I3;phaseout.dynamics = [dw1 dw2 dw3];phaseout.integrand = 0.5*(u1.^2 + u2.^2 + u3.^2);
end

endpoint function

此处代码很简单,只有2行。

function output = socpEndpoint(input)J  = input.phase.integral;output.objective = J;
end

完整代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 功能描述:刚体非对称航天器控制问题
% 文件名解释:mainSpacecraftOCP.m 中,main 代表 主函数,
%             Spacecraft 代表 航天器,
%             OCP 代表 最优控制问题
% 作者:Lei Lie
% 时间:2024/06/22
% 版本:1.0
% - 完成了代码框架的初始搭建
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear;close all;
tic;
%% 01.初始参数设置
%-------------------------------------------------------------------------%
%----------------------- 设置问题的求解边界 ------------------------------%
%-------------------------------------------------------------------------%
% 设置时间
t0 = 0;
tf = 100;
% 设置状态量初值
w10 = .01;
w20 = .005;
w30 = .001;
% 设置状态量边界条件
w1_max = 1;
w1_min = 0;
w2_max = 1;
w2_min = 0;
w3_max = 1;
w3_min = 0;
% 设置控制量初值
u10 = -.009;
u20 = -.004;
u30 = -.001;
% 设置控制量边界条件
u1_max = 0;
u1_min = -.01;
u2_max = 0;
u2_min = -.01;
u3_max = 0;
u3_min = -.01;
% 设置静态参数
auxdata.I1 = 86.24;
auxdata.I2 = 85.07;
auxdata.I3 = 113.59;
% 设置不等式约束边界条件(路径约束)
path_max = .002;
path_min = 0;%% 02.边界条件设置
%-------------------------------------------------------------------------%
%------------------------ 将求解边界设置于问题中 -------------------------%
%-------------------------------------------------------------------------%
bounds.phase.initialtime.lower  = t0; 
bounds.phase.initialtime.upper  = t0;
bounds.phase.finaltime.lower    = tf; 
bounds.phase.finaltime.upper    = tf;
bounds.phase.initialstate.lower = [w10 w20 w30]; 
bounds.phase.initialstate.upper = [w10 w20 w30];
bounds.phase.state.lower        = [w1_min w2_min w3_min]; 
bounds.phase.state.upper        = [w1_max w2_max w3_max];
bounds.phase.finalstate.lower   = [0 0 0];
bounds.phase.finalstate.upper   = [0 0 0];
bounds.phase.control.lower      = [u1_min u2_min u3_min]; 
bounds.phase.control.upper      = [u1_max u2_max u3_max];
bounds.phase.integral.lower     = 0; 
bounds.phase.integral.upper     = 10000;%% 03.初值猜测
%-------------------------------------------------------------------------%
%------------------------------- 初值猜想 --------------------------------%
%-------------------------------------------------------------------------%
guess.phase.time     = [t0; tf]; 
guess.phase.state    = [[w10 w20 w30];[0 0 0]];
guess.phase.control  = [[u10 u20 u30];[u10 u20 u30]];
guess.phase.integral = 100;%% 04.设置GPOPS求解器参数
%-------------------------------------------------------------------------%
%---------------------------- 设置求解器参数 -----------------------------%        
%-------------------------------------------------------------------------%
setup.name = 'Spacecraft-OCP';
setup.functions.continuous  = @socpContinuous;
setup.functions.endpoint   	= @socpEndpoint;
setup.bounds                = bounds;
setup.guess                 = guess;
setup.auxdata               = auxdata;
setup.nlp.solver            = 'ipopt';
setup.derivatives.supplier  = 'sparseCD';
setup.derivatives.derivativelevel = 'second';
setup.mesh.method           = 'hp1';
setup.mesh.tolerance        = 1e-6;
setup.mesh.maxiteration     = 45;
setup.mesh.colpointsmax     = 4;
setup.mesh.colpointsmin     = 10;
setup.mesh.phase.fraction   = 0.1*ones(1,10);
setup.mesh.phase.colpoints  = 4*ones(1,10);
setup.method = 'RPMintegration';%% 05.求解
%-------------------------------------------------------------------------%
%----------------------- 使用 GPOPS2 求解最优控制问题 --------------------%
%-------------------------------------------------------------------------%
output = gpops2(setup);
solution = output.result.solution;
toc;%% 06.画图
t = solution.phase.time(:,1);
w1 = solution.phase.state(:,1);
w2 = solution.phase.state(:,2);
w3 = solution.phase.state(:,3);
u1 = solution.phase.control(:,1);
u2 = solution.phase.control(:,2);
u3 = solution.phase.control(:,3);figure('Color',[1,1,1]);
plot(t,w1,'-','LineWidth',1.5);hold on;
plot(t,w2,'-.','LineWidth',1.5);
plot(t,w3,'--','LineWidth',1.5);
xlabel('Time',...'FontWeight','bold');
ylabel('States',...'FontWeight','bold');
legend('w1','w2','w3',...'LineWidth',1,...'EdgeColor',[1,1,1],...'Orientation','horizontal',...'Position',[0.5,0.93,0.40,0.055]);
set(gca,'FontName','Times New Roman',...'FontSize',15,...'LineWidth',1.3);
print -dpng spacecraft_ocp_state.pngfigure('Color',[1,1,1]);
plot(t,u1,'-','LineWidth',1.5);hold on;
plot(t,u2,'-.','LineWidth',1.5);
plot(t,u3,'--','LineWidth',1.5);
xlabel('Time',...'FontWeight','bold');
ylabel('Control',...'FontWeight','bold');
legend('u1','u2','u3',...'LineWidth',1,...'EdgeColor',[1,1,1],...'Orientation','horizontal',...'Position',[0.5,0.93,0.40,0.055]);
set(gca,'FontName','Times New Roman',...'FontSize',15,...'LineWidth',1.3);
print -dpng spacecraft_ocp_control.png%% 函数模块部分
% ----------------------------------------------------------------------- %
% ------------------------- BEGIN: vsopcContinuous.m -------------------- %
% ----------------------------------------------------------------------- %
function phaseout = socpContinuous(input)w1 = input.phase.state(:,1);w2 = input.phase.state(:,2);w3 = input.phase.state(:,3);u1 = input.phase.control(:,1);u2 = input.phase.control(:,2);u3 = input.phase.control(:,3);I1 = input.auxdata.I1;I2 = input.auxdata.I2;I3 = input.auxdata.I3;dw1 = -((I3-I2)/I1) .* w2 .* w3 + u1 ./ I1;dw2 = -((I1-I3)/I2) .* w1 .* w3 + u2 ./ I2;dw3 = -((I2-I1)/I2) .* w1 .* w2 + u3 ./ I3;phaseout.dynamics = [dw1 dw2 dw3];phaseout.integrand = 0.5*(u1.^2 + u2.^2 + u3.^2);
end
% ----------------------------------------------------------------------- %
% -------------------------- END: vsopcContinuous.m --------------------- %
% ----------------------------------------------------------------------- %% ----------------------------------------------------------------------- %
% -------------------------- BEGIN: vsopcEndpoint.m --------------------- %
% ----------------------------------------------------------------------- %
function output = socpEndpoint(input)J  = input.phase.integral;output.objective = J;
end
% ----------------------------------------------------------------------- %
% --------------------------- END: vsopcEndpoint.m ---------------------- %
% ----------------------------------------------------------------------- %

代码仿真结果

状态量:

在这里插入图片描述

控制量:

在这里插入图片描述

论文仿真结果:

状态量:

在这里插入图片描述

控制量:

在这里插入图片描述

最后

欢迎通过邮箱联系我:lordofdapanji@foxmail.com

来信请注明你的身份,否则恕不回信。

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

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

相关文章

新手选择代理IP时这几点误区一定要避开!

在选择代理IP时,许多用户可能会因为对代理IP的认识不足或受到一些误导,而陷入一些常见的误区。这些误区不仅可能导致用户无法达到预期的效果,还可能带来一些不必要的风险。下面,IPIDEA代理IP就与大家一同分析在选择代理IP时需要避…

Retrofit类型安全的HTTP客户端库(json)

简介 Retrofit是Square公司开发的一个类型安全的HTTP客户端库,用于Android和Java平台,它使得与Web服务的交互变得更加简单快捷。Retrofit将HTTP API转换成Java接口,让你可以用更简洁的代码形式调用RESTful API,Android网络编程重点…

在前端开发过程中如果函数参数很多,该如何精简

1. 在前端开发过程中如果函数参数很多,该如何精简 1.1. 对象参数(对象字面量):1.2. 默认参数和解构赋值:1.3. 使用类或构造函数:1.4. 利用闭包或者高阶函数:1.5. 利用ES6的扩展运算符&#xff1…

Nuxt3 的生命周期和钩子函数(二)

title: Nuxt3 的生命周期和钩子函数(二) date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要:本文深入介绍了Nuxt.js框架中几个关键的生命周期钩子函数,包括app:redirected(SSR环境下重定向前触发…

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内,提供了编译脚本 build.sh,运行该脚本对整个源码进行编译,需要在终端切换到解压 出来的源码路径,找到 build.sh 文件…

6.26作业

1.整理思维导图 2.统计家目录下.c文件的个数 ls ~/*.c | wc -l 3.终端输入一个.sh文件,判断文件是否由可执行权限,如果有可执行权限运行脚本,没有可执行权限添加可执行权限后,再运行脚本 #!/bin/bash read -p "请输入一个.…

从官方源码精简出第1个FreeRTOS程序

一、下载官方源码 1、打开百度搜索freerots,找到官网:FreeRTOS官网 2、将源码解压到没有中文目录的路径下 二、删减目录 1、删除FreeRTOS-Plus和tools 2、删除FreeRTOS/Demo下除CORTEX_STM32F103_Keil外的所有文件 3、删除FreeRTOS\Source\portable下除RVDS和MemM…

海康威视摄像头修复

一、适用场景 1、室外安装的摄像头,长时间日晒雨淋后,可能因风向导致雨水进入水晶头,进而摄像头无法识别; 2、在经常施工的场地,可能由于车辆的进出,或施工设备的运行导致摄像头的网线水晶头断裂而无法使用…

IT入门知识第八部分《云计算》(8/10)

目录 云计算:现代技术的新篇章 1. 云计算基础 1.1 云计算的起源和发展 云计算的早期概念 云计算的发展历程 1.2 云计算的核心特点 按需自助服务 广泛的网络访问 资源池化 快速弹性 按使用量付费 1.3 云计算的优势和挑战 成本效益 灵活性和可扩展性 维…

[leetcode]intersection-of-two-arrays-ii 两个数组的交集 II

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int length1 nums1.size(), length2 …

动态规划——123. 买卖股票的最佳时机 III

目录 1、题目链接 2、题目分析 1.状态表示 2.状态转移方程 3.初始化 4.填表 5.返回值 3、代码解析 1、题目链接 123. 买卖股票的最佳时机 III 2、题目分析 1.状态表示 由题目可知&#xff0c;我们分为两种状态&#xff0c;买入和卖出&#xff0c;又因为只能完成两次交易…

盲源信道分离—FastICA算法性能仿真

本案例中使用Matlab软件对FastICA算法的声音分离性能进行了仿真&#xff0c;分别对简单波形的混合信号、不同类型声音的混合信号、同一类型的混合信号这三种情况进行仿真&#xff0c;主要从分离信号的波形形状、串音误差两方面对分离性能进行衡量&#xff0c;仿真结果显示快速I…

Gradle学习-3 Gradle构建的生命周期

Gradle常用文件目录 Gradle 构建的生命周期&#xff0c;有3个阶段: 初始化阶段配置阶段执行阶段 1、初始化阶段 Gradle 支持构建单个工程个多个子工程&#xff0c;初始化阶段主要负责收集所有参与本次构建的子工程&#xff0c;创建一个项目的层次结构&#xff0c;并未每个…

SpringBoot优点达项目实战:获取系统配置接口(三)

SpringBoot优点达项目实战&#xff1a;获取系统配置接口&#xff08;二&#xff09; 文章目录 SpringBoot优点达项目实战&#xff1a;获取系统配置接口&#xff08;二&#xff09;1、查看接口2、查看数据库3、代码实现1、创建实体类SysConfig2、创建返回数据的vo3、创建control…

API 安全策略和基础指南

API 是当今数字创新计划的核心&#xff0c;已成为应用程序的头号攻击载体。了解什么是 API 安全、为什么它如此重要&#xff0c;以及如何保护您的 API 免受现代威胁至关重要。 什么是 API 安全&#xff1f; 应用程序编程接口&#xff08;API&#xff09;是现代应用程序的基石…

打破数据分析壁垒:SPSS复习必备(九)

有序定性资料统计推断 1.分类 单向有序行列表 双向有序属性相同行列表 双向有序属性不同行列表 2.单向有序行列表 秩和检验 ① 两组单向有序分类资料 ②多组单向有序定性资料 步骤&#xff1a; 1.建立检验假设和确定检验水准 2.编秩 3.求秩和 4.确定检验统计量 5…

按位与、或、异或操作符

目录 & --- 按位与操作符 按位与操作符运用规则 按位与操作符相关代码 按位与操作符相关代码验证 | --- 按位或操作符 按位或操作符运用规则 按位或操作符相关代码 按位或操作符相关代码验证 ^ --- 按位异或操作符 按位异或操作符运用规则 按位异或操作符相关代…

分页组件 vue/uniapp

失效如上图 1.父组件调用 <onion-pagination :page.sync="todusGameQuery.pageSize" @update:page="changeTodusLoadMore":pageSize="todusGameQuery.pageNum" :total="todusGameTotal"></onion-pagination> 2.组件封装…

海纳斯 hinas 的hi3798mv100 华为悦盒 6108v9 安装wifi模块

hi3798mv100安装wifi模块 1.执行脚本 &#xff0c;执行完毕后重启服务器2. 继续执行脚本3.检查网卡驱动安装是否正确4.查看网卡安装状态5.连接wifi结尾 1.执行脚本 &#xff0c;执行完毕后重启服务器 bash <(curl -sSL https://gitee.com/xjxjin/scripts/raw/main/install_…

【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers

在当今人工智能与大数据飞速发展的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为推动科技进步的重要力量。而在NLP领域&#xff0c;Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度&#xff0c;为您深…