2024国赛A问题三和四

问题三

最小螺距单目标优化模型的建立

问题二考虑了在螺距固定的条件下计算舞龙队盘入的终止时间,问题三在第二问的基础提出了改变螺距的要求,即求解在螺距最小为多少时,龙头前把手能够沿着相应的螺线盘入到调头空间的边界。故可将其转换为一个单目标优化问题,目标函数为求解最小的螺距,将板凳龙模型中具体物理要求与龙头前把手能够沿着相应的螺线盘入到调头空间的边界作为约束条件,由于该目标函数非线性且较为复杂,故本文采取了带罚函数的双重模拟退火算法与变步长搜索算法结合进行求解。

目标函数与约束条件

由于此时螺距的取值受到约束条件的限制,故将螺距 a a a的表达修改为变量 A A A,可写出目标函数的表达为:
min ⁡ A \min A minA
其中约束条件如下如下:

(1). 根据题意,龙头能够进入调头空间的边界,即此时结束位置的极径应该小于4.5m,此时螺线方程为 r = A 2 π ⋅ θ r=\frac{A}{2\pi}\cdot \theta r=2πAθ,故可列约束条件为:
A 2 π ⋅ θ ≤ 4.5 ( m ) \frac{A}{2\pi}\cdot \theta \leq4.5(m) 2πAθ4.5(m)
(2).根据题意,在龙头能够进入调头空间前,板凳之间不能相撞,即此时的决策变量应该满足的约束条件为:
∑ i = 1 223 ∑ j = 1 , 223 δ i j = 0 \sum_{i=1}^{223}\sum_{j=1,}^{223}\delta_{ij}=0 i=1223j=1,223δij=0
(3).板凳的宽度为15cm,螺距的宽度能够支持两个板凳并肩移动,即此时螺距应该满足的约束条件为:
A ≥ 30 ( c m ) A \geq30(cm) A30(cm)
(4).调头空间意味着舞龙队的总长度不能长于螺线的总弧长,此时应该满足的约束条件为:
A ∫ 0 32 π 1 + θ 2 d θ ≥ 220 × 222 + 341 A\int_{0}^{32\pi}\sqrt{1+\theta^2}d\theta \geq220\times222+341 A032π1+θ2 dθ220×222+341
(5).此时碰撞时间的求解模型基于问题一中对位置的迭代求解模型,给出问题一中的迭代方程为:
{ ( x i + 1 − x i ) 2 + ( y i + 1 − y i ) 2 = 16 5 2 x i + 1 = 55 2 π ⋅ θ i + 1 ⋅ cos ⁡ ( θ i + 1 ) y i + 1 = 55 2 π ⋅ θ i + 1 ⋅ sin ⁡ ( θ i + 1 ) \begin{cases} (x_{i+1}-x_i)^2+(y_{i+1}-y_i)^2=165^2&\\ x_{i+1}=\frac {55}{2\pi}\cdot\theta_{i+1}\cdot\cos(\theta_{i+1})\\y_{i+1}=\frac {55}{2\pi}\cdot\theta_{i+1}\cdot\sin(\theta_{i+1})&\\ \end{cases} (xi+1xi)2+(yi+1yi)2=1652xi+1=2π55θi+1cos(θi+1)yi+1=2π55θi+1sin(θi+1)
此处 ( x i + 1 , y i + 1 ) (x_{i+1},y_{i+1}) (xi+1,yi+1)为下一龙身前孔的坐标, ( x i , y i ) (x_{i},y_{i}) (xi,yi)为上一龙身前孔的坐标, θ i + 1 \theta_{i+1} θi+1为下一龙身前孔此时的弧度。

综上所述,给出问题三最小螺距单目标优化模型如下:
min ⁡ A s.t. { A 2 π ⋅ θ ≤ 4.5 ( m ) ∑ i = 1 223 ∑ j = 1 , 223 δ i j = 0 A ≥ 30 ( c m ) A ∫ 0 32 π 1 + θ 2 d θ ≥ 220 × 222 + 341 ( x i + 1 − x i ) 2 + ( y i + 1 − y i ) 2 = 16 5 2 x i + 1 = 55 2 π ⋅ θ i + 1 ⋅ cos ⁡ ( θ i + 1 ) y i + 1 = 55 2 π ⋅ θ i + 1 ⋅ sin ⁡ ( θ i + 1 ) \min A\\ \text{s.t.}\begin{cases} \frac{A}{2\pi}\cdot \theta \leq4.5(m)\\ \sum_{i=1}^{223}\sum_{j=1,}^{223}\delta_{ij}=0\\ A \geq30(cm)\\ A\int_{0}^{32\pi}\sqrt{1+\theta^2}d\theta \geq220\times222+341\\ (x_{i+1}-x_i)^2+(y_{i+1}-y_i)^2=165^2&\\ x_{i+1}=\frac {55}{2\pi}\cdot\theta_{i+1}\cdot\cos(\theta_{i+1})\\y_{i+1}=\frac {55}{2\pi}\cdot\theta_{i+1}\cdot\sin(\theta_{i+1})&\\ \end{cases} minAs.t. 2πAθ4.5(m)i=1223j=1,223δij=0A30(cm)A032π1+θ2 dθ220×222+341(xi+1xi)2+(yi+1yi)2=1652xi+1=2π55θi+1cos(θi+1)yi+1=2π55θi+1sin(θi+1)

模型的求解

本题的方程比较复杂且非线性,但是最终结果为一维且搜索空间较小,于是本文在求解的时候采取了带罚函数的模拟退火算法与定步长遍历算法结合的办法,启发式算法可以很好的在解空间内探查到最优解,而变步长遍历算法则可以在解空间较小的情况下遍历空间得到整个函数的分布情况进而查找到最优解。下面是两种算法的求解过程:

带罚函数的双重模拟退火算法

双重模拟退火算法(Dual Annealing)是一种启发式算法,适合用于求解复杂的非线性优化问题。在该问题中,由于目标函数和约束条件都比较复杂,使用双重模拟退火算法可以有效搜索到接近全局最优解的结果。为了处理约束条件,本文引入罚函数,将约束条件违背的程度引入到目标函数中,确保求解过程中尽量满足约束条件。

Step1 设定初始解,初始温度和罚函数

设定初始螺距 A 0 = 30 c m A_0=30cm A0=30cm,初始温度 T 0 = 100 T_0=100 T0=100,设定罚函数因子 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2 λ 3 \lambda_3 λ3,其大小为某远大于目标值的数,定义罚函数为:
P ( A ) = λ 1 ⋅ max ⁡ ( 0 , A 2 π ⋅ θ − 4.5 ) + λ 2 ⋅ ( ∑ i = 1 223 ∑ j = 1 , 223 δ i j ) + λ 3 ⋅ max ⁡ ( 0 , 220 × 222 + 341 − A ∫ 0 32 π 1 + θ 2 d θ ) P(A) = \lambda_1 \cdot \max(0, \frac{A}{2\pi}\cdot \theta - 4.5) + \lambda_2 \cdot \left(\sum_{i=1}^{223}\sum_{j=1,}^{223}\delta_{ij}\right) + \lambda_3 \cdot \max(0, 220\times 222 + 341 - A\int_{0}^{32\pi}\sqrt{1+\theta^2}d\theta) P(A)=λ1max(0,2πAθ4.5)+λ2(i=1223j=1,223δij)+λ3max(0,220×222+341A032π1+θ2 dθ)
由此实现对约束条件的处理

Step2 全局搜索

在当前解 x i x_i xi的邻域内生成新解 x i + 1 x_{i+1} xi+1,计算新解的函数值 f ( x i + 1 ) f(x_{i+1}) f(xi+1),如果 f ( x i + 1 ) < f ( x i ) f(x_{i+1})<f(x_i) f(xi+1)<f(xi),则接受新解作为当前解。若不满足该条件,则以概率 P = exp ⁡ ( f ( x i ) − f ( x i + 1 ) T ) P=\exp\left(\frac{f(x_i)-f(x_{i+1})}T\right) P=exp(Tf(xi)f(xi+1))接受新解,随着温度的降低,接受劣解的概率逐渐减小。

Step3 局部搜索

在接受新解后,使用局部优化算法(如最速下降法或梯度下降法)对当前解进行局部优化,以快速收敛到邻域内的局部最优解。

Step4 温度下降

更新温度 T i + 1 = α ⋅ T i T_{i+1}=α⋅T_i Ti+1=αTi,逐步降低温度。

Step5 搜索结束,输出结果

当最终结果收敛时,将搜索得到的结果输出,获得此时的螺距长度。

变步长遍历算法

变步长求解是一种结合了大步长的快速搜索和小步长的精细搜索的优化策略。在开始阶段使用较大的步长快速缩小解的范围,后面逐步缩小步长,通过类似二分查找的方式,精确找到最优解。

Step1 设定初始解和初始步长

设定初始螺距 A 0 = 30 c m A_0=30cm A0=30cm,最大螺距为在通过观察模拟退火算法求解过程基础上确定的边界解 A m a x = 50 c m A_{max}=50cm Amax=50cm,初始步长为 Δ A = 2 c m \Delta A=2cm ΔA=2cm

Step2 大步长快速搜索

从初始螺距 A 0 A_0 A0开始搜索,以 Δ A = 2 c m \Delta A=2cm ΔA=2cm为步长开始遍历,快速搜索解空间直达搜索到 A m a x A_{max} Amax,计算每个搜索点的目标函数值,若当前螺距下的目标函数值优于前面搜索到的最优值,则更新最优值,重复上述过程,直到搜索完初始步长的范围。

Step3 二分精细搜索

经过大步长搜索找到最优螺距 A b e s t A_{best} Abest,在其左右邻域 [ A b e s t − Δ A , A b e s t + Δ A ] [A_{best}-\Delta A,A_{best}+\Delta A] [AbestΔA,Abest+ΔA]内进行搜索,此时设定步长为 Δ A 2 \frac{\Delta A}{2} 2ΔA。重复Step2与Step3的步骤。

Step4 导出搜索结果

当搜索步长缩小到 Δ A 1024 \frac{\Delta A}{1024} 1024ΔA时,其值以达到误差容限内,输出此时的目标函数值 A b e s t A_{best} Abest

问题四

模型的建立

问题四设置盘入螺线的螺距为1.7m,盘入螺线与盘出螺线为中心对称关系,并且舞龙队需要在调头空间内实现调头,其中调头位置在盘入螺线上,调出位置在盘出螺线,即现在确定了调头空间的调入点与调出点,以及调入圆弧与调出圆弧之间的数量关系,在未知圆弧进入点与圆弧出去点的情况下对圆弧曲线的长度进行优化,求解出最短的调头曲线。为了求解这个问题,首先需要求解调头螺线的数学方程,进而通过几何关系建立起调头圆弧的数学模型,根据圆弧的弧度和调头的位置确定整个调头曲线长度的表达式,作为模型的目标函数,然后通过数学模型以及实际板凳的物理模型给出目标函数的约束条件,

调头弧线模型的建立

首先已知盘入螺线的螺距为 1.7 m,盘出螺线与盘入螺线关于螺线中心呈中心对称,故可先求解出盘入螺线 C 1 C_1 C1与盘出螺线 C 2 C_2 C2的表达式分别为:
{ C 1 : r = 170 2 π ⋅ θ C 2 : r = − 170 2 π ⋅ θ \begin{cases} C1:r=\frac{170}{2\pi}\cdot \theta\\ C2:r=-\frac{170}{2\pi}\cdot \theta\\ \end{cases} {C1:r=2π170θC2:r=2π170θ
由于目前只可推出进入调头空间的点与离开调头空间的点,由于两点分别位于中心对称的两螺线与调头区域圆的交点上,所以两点坐标存在中心对称关系,可设进入点为 A ( x A , y A ) A(x_A,y_A) A(xA,yA),离开点为 B ( x B , y B ) B(x_B,y_B) B(xB,yB),则两点满足的方程为:
{ x A + x B = 0 y A + y B = 0 x 2 + y 2 = 45 0 2 \begin{cases} x_A+x_B=0\\ y_A+y_B=0\\ x^2+y^2=450^2 \end{cases} xA+xB=0yA+yB=0x2+y2=4502
由于开始调头的点在盘入螺线和前段圆弧上,且经过该点后龙头前把手运动方程从螺线方程变为圆方程,结束调头的点则相反,故可设开始调头的点为点 C C C,坐标为 ( x C , y C ) (x_C,y_C) (xC,yC),结束调头的点为点 D D D,坐标为 ( x D , y D ) (x_D,y_D) (xD,yD)。其示意图如下图所示:

故可表示调头弧线的总长度 L L L可表示为:
L = A C ⌢ + C D ⌢ + D B ⌢ L=\overset{\LARGE{\frown}}{AC}+\overset{\LARGE{\frown}}{CD}+\overset{\LARGE{\frown}}{DB} L=AC+CD+DB
为确定两圆的圆心位置,需计算出点 C C C处螺线的导数,将其带入曲率半径的公式即可计算出前段圆弧的半径,进而确定后段圆弧半径,即可确定两圆心的位置以及调头弧线的长度。

由于点 C C C位于螺线上,故可先求解螺线的 d x d θ \frac{dx}{d\theta} dθdx d y d θ \frac{dy}{d\theta} dθdy,再通过链式法则即可求解得到 d y d x \frac{dy}{dx} dxdy,计算过程如下:
d x d θ = 170 2 π ⋅ ( cos ⁡ ( θ ) − θ ⋅ sin ⁡ ( θ ) ) d y d θ = 170 2 π ⋅ ( sin ⁡ ( θ ) + θ ⋅ cos ⁡ ( θ ) ) d y d x = d y d θ d x d θ = sin ⁡ ( θ ) + θ ⋅ cos ⁡ ( θ ) cos ⁡ ( θ ) − θ ⋅ sin ⁡ ( θ ) \frac{dx}{d\theta}=\frac{170}{2\pi}\cdot(\cos(\theta)-\theta\cdot\sin(\theta))\\ \frac{dy}{d\theta}=\frac{170}{2\pi}\cdot(\sin(\theta)+\theta\cdot\cos(\theta))\\ \frac{dy}{dx}=\frac{\frac{dy}{d\theta}}{\frac{dx}{d\theta}}=\frac{\sin(\theta)+\theta\cdot\cos(\theta)}{\cos(\theta)-\theta\cdot\sin(\theta)} dθdx=2π170(cos(θ)θsin(θ))dθdy=2π170(sin(θ)+θcos(θ))dxdy=dθdxdθdy=cos(θ)θsin(θ)sin(θ)+θcos(θ)
故点 C C C处的导数为:
y C ′ ( x ) = d y C d x C = d y C d θ C d x C d θ C = sin ⁡ ( θ C ) + θ C ⋅ cos ⁡ ( θ C ) cos ⁡ ( θ C ) − θ ⋅ sin ⁡ ( θ C ) y'_C(x)=\frac{dy_C}{dx_C}=\frac{\frac{dy_C}{d\theta_C}}{\frac{dx_C}{d\theta_C}}=\frac{\sin(\theta_C)+\theta_C\cdot\cos(\theta_C)}{\cos(\theta_C)-\theta\cdot\sin(\theta_C)} yC(x)=dxCdyC=dθCdxCdθCdyC=cos(θC)θsin(θC)sin(θC)+θCcos(θC)
根据互相垂直的直线之间存在 k 1 ⋅ k 2 = − 1 k_1\cdot k_2=-1 k1k2=1可知 C C C点切线的垂线斜率 k w 1 k_{w1} kw1为:
k w 1 = d y C d θ C d x C d θ C = − cos ⁡ ( θ C ) − θ ⋅ sin ⁡ ( θ C ) ) sin ⁡ ( θ C ) + θ C ⋅ cos ⁡ ( θ C k_{w1}=\frac{\frac{dy_C}{d\theta_C}}{\frac{dx_C}{d\theta_C}}=-\frac{\cos(\theta_C)-\theta\cdot\sin(\theta_C))}{\sin(\theta_C)+\theta_C\cdot\cos(\theta_C} kw1=dθCdxCdθCdyC=sin(θC)+θCcos(θCcos(θC)θsin(θC))
同理, D D D点切线的垂线斜率 k w 2 k_{w2} kw2为:
k w 2 = d y D d θ D d x D d θ D = − cos ⁡ ( θ D ) − θ ⋅ sin ⁡ ( θ D ) ) sin ⁡ ( θ D ) + θ D ⋅ cos ⁡ ( θ D ) k_{w2}=\frac{\frac{dy_D}{d\theta_D}}{\frac{dx_D}{d\theta_D}}=-\frac{\cos(\theta_D)-\theta\cdot\sin(\theta_D))}{\sin(\theta_D)+\theta_D\cdot\cos(\theta_D)} kw2=dθDdxDdθDdyD=sin(θD)+θDcos(θD)cos(θD)θsin(θD))
作出切线图后,调头空间中存在如图的几何约束,示意图如下图所示:

其中 r 1 r_1 r1为前段圆的半径, r 2 r_2 r2为后段圆的半径,设两圆圆心与坐标分别为 O 1 ( x O 1 , y O 1 ) O_1(x_{O1},y_{O1}) O1(xO1,yO1) O 2 ( x O 2 , y O 2 ) O_2(x_{O2},y_{O2}) O2(xO2,yO2),此时可依图列出方程组为:
{ x O 1 = x C + 1 k w 1 2 + 1 ⋅ r 1 y O 1 = y C + k w 1 k w 1 2 + 1 ⋅ r 1 x O 2 = x D + 1 k w 2 2 + 1 ⋅ r 2 y O 2 = y D + k w 2 k w 2 2 + 1 ⋅ r 2 r 1 = 2 r 2 ( x O 1 − x O 2 ) 2 + ( y O 1 − y O 2 ) 2 = r 1 + r 2 \begin{cases} x_{O1}=x_C+\frac1{\sqrt{k_{w1}^2+1}}\cdot r_1\\ y_{O1}=y_C+\frac{k_{w1}}{\sqrt{k_{w1}^2+1}}\cdot r_1\\ x_{O2}=x_D+\frac1{\sqrt{k_{w2}^2+1}}\cdot r_2\\ y_{O2}=y_D+\frac{k_{w2}}{\sqrt{k_{w2}^2+1}}\cdot r_2\\ r_1=2r_2&\\ \sqrt{(x_{O1}-x_{O2})^2+(y_{O1}-y_{O2})^2}=r_1+r_2\\ \end{cases} xO1=xC+kw12+1 1r1yO1=yC+kw12+1 kw1r1xO2=xD+kw22+1 1r2yO2=yD+kw22+1 kw2r2r1=2r2(xO1xO2)2+(yO1yO2)2 =r1+r2
求解上述方程组,即可计算得到两圆圆心的坐标。

得到圆心坐标后,则需要再计算出两圆的切点 E E E的坐标,由于已知两圆的圆心坐标和圆心到 E E E点的直线的斜率,故需要通过简单的比例计算就可得到 E E E点的坐标如下:
{ x E = x O 1 + r 1 r 1 + r 2 ⋅ ( x O 2 − x O 1 ) y E = y O 1 + r 1 r 1 + r 2 ⋅ ( y O 2 − y O 1 ) \begin{cases} x_E=x_{O1}+\frac{r1}{r1+r2}\cdot (x_{O2}-x_{O1})\\ y_E=y_{O1}+\frac{r1}{r1+r2}\cdot (y_{O2}-y_{O1}) \end{cases} {xE=xO1+r1+r2r1(xO2xO1)yE=yO1+r1+r2r1(yO2yO1)
下面依据 E E E点的坐标,注意到前段圆弧均为顺时针方向,后段圆弧为逆时针方向,在导出公式中将角度的顺序进行调整,可导出两圆转过的弧度 ϕ 1 \phi_1 ϕ1 ϕ 2 \phi_2 ϕ2为:
{ ϕ 1 = arctan ⁡ ( y C − y O 1 x C − x O 1 ) − arctan ⁡ ( y E − y O 1 x E − x O 1 ) ϕ 2 = arctan ⁡ ( y D − y O 2 x D − x O 2 ) − arctan ⁡ ( y E − y O 2 x E − x O 2 ) \begin{cases} \phi_1=\arctan(\frac{y_C-y_{O1}}{x_C-x_{O1}})-\arctan (\frac{y_E-y_{O1}}{x_E-x_{O1}})\\ \phi_2=\arctan(\frac{y_D-y_{O2}}{x_D-x_{O2}})-\arctan (\frac{y_E-y_{O2}}{x_E-x_{O2}})\\ \end{cases} {ϕ1=arctan(xCxO1yCyO1)arctan(xExO1yEyO1)ϕ2=arctan(xDxO2yDyO2)arctan(xExO2yEyO2)
即可求解出 L L L的表达式为:
L = 170 2 π ∫ θ C θ A 1 + θ 2 d θ + r 1 ⋅ ϕ 1 + r 2 ⋅ ϕ 2 + 170 2 π ∫ θ D θ B 1 + θ 2 d θ L=\frac{170}{2\pi}\int_{\theta_C}^{\theta_A}\sqrt{1+\theta^2}d\theta+r_1\cdot\phi_1+r_2\cdot\phi_2+\frac{170}{2\pi}\int_{\theta_D}^{\theta_B}\sqrt{1+\theta^2}d\theta L=2π170θCθA1+θ2 dθ+r1ϕ1+r2ϕ2+2π170θDθB1+θ2 dθ

建立最短弦长单目标优化模型

前文已经求解出 L L L的表达式,根据题意,需要通过调整圆弧,保持各部分相切在条件下使得调头曲线变短,故可基于此构建最短调头曲线的优化模型,其目标函数为最短调头曲线弧长,约束条件则基于调头区域内需要保持各部分相切以及圆弧之间的几何关系约束。

目标函数与约束条件

目标函数为最短调头曲线弧长,由于前文的推导过程均基于 C C C点与 D D D点的不同坐标,即 θ C 与 θ D \theta_C与\theta_D θCθD,故可视 L L L θ C \theta_C θC θ D \theta_D θD的函数,故目标函数数学表达式为:
min ⁡ L ( θ C , θ D ) = 170 2 π ∫ θ C θ A 1 + θ 2 d θ + r 1 ⋅ ϕ 1 + r 2 ⋅ ϕ 2 + 170 2 π ∫ θ D θ B 1 + θ 2 d θ \min L(\theta_C,\theta_D)=\frac{170}{2\pi}\int_{\theta_C}^{\theta_A}\sqrt{1+\theta^2}d\theta+r_1\cdot\phi_1+r_2\cdot\phi_2+\frac{170}{2\pi}\int_{\theta_D}^{\theta_B}\sqrt{1+\theta^2}d\theta minL(θC,θD)=2π170θCθA1+θ2 dθ+r1ϕ1+r2ϕ2+2π170θDθB1+θ2 dθ
其中 r 1 , r 2 , ϕ 1 , ϕ 2 r_1,r_2,\phi_1,\phi_2 r1,r2,ϕ1,ϕ2均可由 θ C \theta_C θC θ D \theta_D θD确定, θ A \theta_A θA θ B \theta_B θB为定值。

约束条件在前文调头弧线模型的建立已经进行了详细的推导,得出了方程组(44),(45),(46),(47)与(48),方程组本问中需要的约束条件。

综上所述,最短弦长单目标优化模型建立如下:
min ⁡ θ C , θ D L ( θ C , θ D ) = 170 2 π ∫ θ C θ A 1 + θ 2 d θ + r 1 ⋅ ϕ 1 + r 2 ⋅ ϕ 2 + 170 2 π ∫ θ D θ B 1 + θ 2 d θ s.t. { k w 1 = − cos ⁡ ( θ C ) − θ ⋅ sin ⁡ ( θ C ) ) sin ⁡ ( θ C ) + θ C ⋅ cos ⁡ ( θ C k w 2 = − cos ⁡ ( θ D ) − θ ⋅ sin ⁡ ( θ D ) ) sin ⁡ ( θ D ) + θ D ⋅ cos ⁡ ( θ D ) x O 1 = x C + 1 k w 1 2 + 1 ⋅ r 1 y O 1 = y C + k w 1 k w 1 2 + 1 ⋅ r 1 x O 2 = x D + 1 k w 2 2 + 1 ⋅ r 2 y O 2 = y D + k w 2 k w 2 2 + 1 ⋅ r 2 r 1 = 2 r 2 ( x O 1 − x O 2 ) 2 + ( y O 1 − y O 2 ) 2 = r 1 + r 2 x E = x O 1 + r 1 r 1 + r 2 ⋅ ( x O 2 − x O 1 ) y E = y O 1 + r 1 r 1 + r 2 ⋅ ( y O 2 − y O 1 ) ϕ 1 = arctan ⁡ ( y C − y O 1 x C − x O 1 ) − arctan ⁡ ( y E − y O 1 x E − x O 1 ) ϕ 2 = arctan ⁡ ( y D − y O 2 x D − x O 2 ) − arctan ⁡ ( y E − y O 2 x E − x O 2 ) \min_{\theta_C,\theta_D} L(\theta_C,\theta_D)=\frac{170}{2\pi}\int_{\theta_C}^{\theta_A}\sqrt{1+\theta^2}d\theta+r_1\cdot\phi_1+r_2\cdot\phi_2+\frac{170}{2\pi}\int_{\theta_D}^{\theta_B}\sqrt{1+\theta^2}d\theta \\ \text{s.t.} \begin{cases} k_{w1}=-\frac{\cos(\theta_C)-\theta\cdot\sin(\theta_C))}{\sin(\theta_C)+\theta_C\cdot\cos(\theta_C}\\ k_{w2}=-\frac{\cos(\theta_D)-\theta\cdot\sin(\theta_D))}{\sin(\theta_D)+\theta_D\cdot\cos(\theta_D)}\\ x_{O1}=x_C+\frac1{\sqrt{k_{w1}^2+1}}\cdot r_1\\ y_{O1}=y_C+\frac{k_{w1}}{\sqrt{k_{w1}^2+1}}\cdot r_1\\ x_{O2}=x_D+\frac1{\sqrt{k_{w2}^2+1}}\cdot r_2\\ y_{O2}=y_D+\frac{k_{w2}}{\sqrt{k_{w2}^2+1}}\cdot r_2\\ r_1=2r_2&\\ \sqrt{(x_{O1}-x_{O2})^2+(y_{O1}-y_{O2})^2}=r_1+r_2\\ x_E=x_{O1}+\frac{r1}{r1+r2}\cdot (x_{O2}-x_{O1})\\ y_E=y_{O1}+\frac{r1}{r1+r2}\cdot (y_{O2}-y_{O1})\\ \phi_1=\arctan(\frac{y_C-y_{O1}}{x_C-x_{O1}})-\arctan (\frac{y_E-y_{O1}}{x_E-x_{O1}})\\ \phi_2=\arctan(\frac{y_D-y_{O2}}{x_D-x_{O2}})-\arctan (\frac{y_E-y_{O2}}{x_E-x_{O2}})\\ \end{cases} θC,θDminL(θC,θD)=2π170θCθA1+θ2 dθ+r1ϕ1+r2ϕ2+2π170θDθB1+θ2 dθs.t. kw1=sin(θC)+θCcos(θCcos(θC)θsin(θC))kw2=sin(θD)+θDcos(θD)cos(θD)θsin(θD))xO1=xC+kw12+1 1r1yO1=yC+kw12+1 kw1r1xO2=xD+kw22+1 1r2yO2=yD+kw22+1 kw2r2r1=2r2(xO1xO2)2+(yO1yO2)2 =r1+r2xE=xO1+r1+r2r1(xO2xO1)yE=yO1+r1+r2r1(yO2yO1)ϕ1=arctan(xCxO1yCyO1)arctan(xExO1yEyO1)ϕ2=arctan(xDxO2yDyO2)arctan(xExO2yEyO2)

位置速度计算模型基于调头弧线的优化

在问题一与问题二中,求解板凳龙各个圆孔的位置与速度,按照本文的思路需要计算螺线的积分,但是第四问中路线修改为螺线与双圆弧进行拼接,无法直接套用问题一中对于位置的求解模型,于是在第一问的基础上进行了优化,以 C C C点处的弧度 θ C \theta_C θC D D D点弧度 θ D \theta_D θD作为盘入圆弧与盘出圆弧的范围限制,在从 [ θ D , θ C ] [\theta_D,\theta_C] [θD,θC]的弧度范围内,设定映射关系 g ( θ ) g(\theta) g(θ)表述双圆弧段的板凳位置计算,则整个板凳龙所处位置与弧度的关系可表示为函数 f ( x , y ) f(x,y) f(x,y)如下:
f ( x , y ) = { r ( θ ) , if θ ∈ [ θ C , 32 π ] g ( θ ) , if θ ∈ [ θ D , θ C ] − r ( θ ) , if θ ∈ [ − 32 π , θ D ] f(x,y)=\begin{cases}r(\theta),&\text{if}\theta\in[\theta_C,32\pi]\\g(\theta),&\text{if}\theta\in[\theta_D,\theta_C]\\-r(\theta),&\text{if}\theta\in[-32\pi,\theta_D]\end{cases} f(x,y)= r(θ),g(θ),r(θ),ifθ[θC32π]ifθ[θD,θC]ifθ[32πθD]
其中 r ( θ ) r(\theta) r(θ) − r ( θ ) -r(\theta) r(θ)分别对应前段螺线和后段螺线的位置计算函数,可沿用第一问模型,对于 g ( θ ) g(\theta) g(θ),求解过程如下:

由于驶入圆弧前与盘出圆弧后的位置 C ( x C , y C ) C(x_C,y_C) C(xC,yC) D ( x D , y D ) D(x_D,y_D) DxD,yD)可根据最短路径 L L L求解导出,由此可导出对应的 θ C \theta_C θC θ D \theta_D θD,进而求解出圆弧部分总长度 S = ϕ 1 ⋅ r 1 + ϕ 2 ⋅ r 2 S=\phi_1\cdot r_1+\phi_2\cdot r_2 S=ϕ1r1+ϕ2r2.

其中在整个圆弧路线中,盘入点弧度 θ C \theta_C θC为其中弧度的最大值,即 θ m a x \theta_{max} θmax,同理盘出点 θ D \theta_D θD为其中弧度的最小值,即 θ m i n \theta_{min} θmin,故可定义映射系数 k k k,表示螺旋线开始到当前角度 θ \theta θ 的路径长度相对于整个双圆弧路径长度的比例,其公式为:
k = θ − θ m i n θ m a x − θ m i n k=\frac{\theta-\theta_{min}}{\theta_{max}-\theta_{min}} k=θmaxθminθθmin
基于比例系数与映射关系,可计算出此时在圆弧部分前进路程与后段圆弧长度的差值 Δ x \Delta x Δx及其含义为:
Δ x = k ⋅ S − ϕ 2 ⋅ r 2 \Delta x=k\cdot S-\phi_2\cdot r_2 Δx=kSϕ2r2
其中:

  • 如果 Δ x > 0 \Delta x >0 Δx>0,则当前点在前段圆弧上;
  • 如果 Δ x ≤ 0 \Delta x \leq 0 Δx0,则当前点在后段圆弧上。

若该点在前段圆弧上

首先需求解出该点在前段圆弧上的角度占比 η \eta η的表达式为:
η = k S − r 2 ϕ 2 2 π r 1 \eta=\frac{kS-r_2\phi_2}{2\pi r_1} η=2πr1kSr2ϕ2
最终导出该点的极坐标下的极角 θ 0 \theta_0 θ0表达为:
θ 0 = arctan ⁡ ( y E − y O 1 x E − x O 1 ) + 2 π η \theta_0=\arctan (\frac{y_E-y_{O1}}{x_E-x_{O1}})+2\pi\eta θ0=arctan(xExO1yEyO1)+2πη
最终将 θ 0 \theta_0 θ0与圆心 O 1 ( x O 1 , y O 1 ) O_1(x_{O1},y_{O1}) O1(xO1yO1)的坐标结合即可推导出此时该点的位置坐标为:
f ( x , y ) = { x = x O 1 + r 1 cos ⁡ θ 0 y = y O 1 + r 1 sin ⁡ θ 0 f(x,y)= \begin{cases} x=x_{O1}+r_1\cos\theta_0\\ y=y_{O1}+r_1\sin\theta_0 \end{cases} f(x,y)={x=xO1+r1cosθ0y=yO1+r1sinθ0
若该点在后段圆弧上

推导过程与前段圆弧类似,只是将其中相对的位置计算点改为 O 2 ( x 2 , y 2 ) O_2(x_2,y_2) O2(x2,y2),并且由于其在后段圆弧上,投影范围从 [ θ D , θ C ] [\theta_D,\theta_C] [θD,θC],则其圆弧长度小于后段圆弧的总长,故公式表达修改如下:
η = r 2 ϕ 2 − k S 2 π r 1 \eta=\frac{r_2\phi_2-kS}{2\pi r_1} η=2πr1r2ϕ2kS

θ 0 = arctan ⁡ ( y E − y O 2 x E − x O 2 ) + 2 π η \theta_0=\arctan (\frac{y_E-y_{O2}}{x_E-x_{O2}})+2\pi\eta θ0=arctan(xExO2yEyO2)+2πη

f ( x , y ) = { x = x O 2 + r 2 cos ⁡ θ 0 y = y O 2 + r 2 sin ⁡ θ 0 f(x,y)= \begin{cases} x=x_{O2}+r_2\cos\theta_0\\ y=y_{O2}+r_2\sin\theta_0 \end{cases} f(x,y)={x=xO2+r2cosθ0y=yO2+r2sinθ0

最终导出位置计算的全曲线表达式为:
f ( x , y ) = { r ( θ ) i f θ ∈ [ θ C , 32 π ] { x = x O 1 + r 1 cos ⁡ ( θ 0 ) , y = y O 1 + r 1 sin ⁡ ( θ 0 ) , i f θ ∈ [ θ D , θ C ] a n d Δ x > 0 { x = x O 2 + r 2 cos ⁡ ( θ 0 ) , y = y O 2 + r 2 sin ⁡ ( θ 0 ) , i f θ ∈ [ θ D , θ C ] a n d Δ x ≤ 0 − r ( θ ) i f θ ∈ [ − 32 π , θ D ] \begin{aligned}f(x,y)=\begin{cases}r(\theta)&\mathrm{if~}\theta\in[\theta_C,32\pi]\\\begin{cases}x=x_{O1}+r_1\cos(\theta_0),\\y=y_{O1}+r_1\sin(\theta_0),\end{cases}&\mathrm{if~}\theta\in[\theta_D,\theta_C]\mathrm{~and~}\Delta x>0 \\\begin{cases}x=x_{O2}+r_2\cos(\theta_0),\\y=y_{O2}+r_2\sin(\theta_0),\end{cases}&\mathrm{if~}\theta\in[\theta_D,\theta_C]\mathrm{~and~}\Delta x\leq0\\-r(\theta)&\mathrm{if~}\theta\in[-32\pi,\theta_D]&\end{cases}\end{aligned} f(x,y)= r(θ){x=xO1+r1cos(θ0),y=yO1+r1sin(θ0),{x=xO2+r2cos(θ0),y=yO2+r2sin(θ0),r(θ)if θ[θC,32π]if θ[θD,θC] and Δx>0if θ[θD,θC] and Δx0if θ[32π,θD]
由于数学公式过于繁琐,故在本问中速度的求解模型的建立只采取了问题一中以极小时间步长 Δ t \Delta t Δt进行数值模拟的方法,具体过程将置于模型的求解中进行。

模型的求解

本题中需要求解的部分是单目标优化模型最优值的求解与速度计算小步长数值模拟的求解。对于本题最短弦长单目标优化模型的求解,由于主要决策变量仅为 θ C \theta_C θC θ D \theta_D θD,计算量较小,故采取定步长搜索策略,具体步骤如下:

Step1 设定初始解向量和初始步长

设定初始解 [ θ C 0 , θ D 0 ] [\theta_{C0},\theta_{D0}] [θC0,θD0] [ π , π ] [\pi,\pi] [π,π],步长均为 2 π 360 \frac{2\pi}{360} 3602π,即角度制中的 1 ° 1°

Step2 遍历解空间

采用双层循环的方式遍历解空间,通过固定其中一个变量,改变另一个变量,并计算每一对 [ θ C , θ D ] [\theta_C,\theta_D] [θC,θD]的目标函数值,若比之前的最优值更好,则更新最优解和最优值。

Step3 得到最优解

将最终保存的最优解与最优值导出。

对于问题四速度的求解,仍沿用问题一中提出的求解办法,具体步骤参照问题一模型的求解部分。

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

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

相关文章

网络安全之接入控制

身份鉴别 ​ 定义:验证主题真实身份与其所声称的身份是否符合的过程&#xff0c;主体可以是用户、进程、主机。同时也可实现防重放&#xff0c;防假冒。 ​ 分类:单向鉴别、双向鉴别、三向鉴别。 ​ 主题身份标识信息:密钥、用户名和口令、证书和私钥 Internet接入控制过程 …

UE5 崩溃问题汇总!!!

Using bundled DotNet SDK version: 6.0.302 ERROR: UnrealBuildTool.dll not found in "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" 在你遇到这种极奇崩溃的BUG &#xff0c;难以解决的时候。 尝试了N种方法&#xff0c;都不行的解决方法。…

docker 搭建集群

准备3台机器&#xff1a; #dockermaster 192.168.31.150 sudo hostnamectl set-hostname dockermaster #初始化主节点 docker swarm init --advertise-addr 192.168.31.150 #查看集群是否搭建成功 docker node ls #dockernode1 192.168.31.151 sudo hostnamectl set-hostname …

关于埃斯顿机器人文件导出或者系统日志导出

关于埃斯顿机器人文件导出或者日志导出&#xff0c;登录模式&#xff0c;选择高级设置&#xff0c;控制器备份恢复 选择U盘导入地址&#xff0c;点击导出&#xff0c;等待时间30秒就可以查看文件格式和系统日志

golang标准库SSH操作示例

文章目录 前言一、了解SSH二、重要知识点1.安装ssh库2.ssh库重要知识牢记 三、模拟连接远程服务器并执行命令四、SSH与os/exec标准库下执行命令的几种方式对比五、SSH库下三种执行命令方式演示5.1. session.CombinedOutput()示例5.2. session.Run()示例5.3. session.Start()、s…

嵌入式轻量级开源操作系统:HeliOS的使用

嵌入式轻量级开源操作系统:HeliOS的使用 &#x1f4cd;项目地址&#xff1a;https://github.com/heliosproj/HeliOS HeliOS项目是一个社区交付的开源项目&#xff0c;用于构建和维护HeliOS嵌入式操作系统&#xff08;OS&#xff09;。HeliOS是一个功能齐全的操作系统&#xff0…

解决:excel鼠标滚动幅度太大如何调节?

在excel里为什么滚动一次跳过很多行呢&#xff1f;很不方便。。。 1. 问题&#xff1a; 一开始单元格从第1行开始&#xff1a; 鼠标轻轻滚动一下后&#xff0c;直接跳到第4行&#xff1a; 鼠标在word和浏览器里都是好好的。在excel里为什么不是滚动一次跳过一行呢&#xff…

kubernetes Gateway API-部署和基础配置

文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…

Docker服务发现新纪元:探索Consul的无限魅力

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 •座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元个人主页&#xff1a;团儿.-CSDN博客 目录 前言&…

湖南引力:低代码助力实现智慧养老管理系统

“低代码开发宛如一座神奇的桥梁&#xff0c;它以简洁高效的方式连接起创意与应用&#xff0c;降低了开发门槛&#xff0c;为企业和开发者带来前所未有的便捷与可能&#xff0c;开启了快速实现软件梦想的新征程。” ——王港&#xff0c;湖南引力科技有限公司 湖南引力科技有…

mongodb和Cassandra

mongodb的一致性问题&#xff1a; 15.MongoDB的一致性(读关注与写关注)_mongo w选项-CSDN博客 孤儿节点问题&#xff1a; 技术干货 | MongoDB 偶遇孤儿文档及处理方法-腾讯云开发者社区-腾讯云 分片集群MongoDB迁移前清除孤儿文档 由数据迁移至MongoDB导致的数据不一致问题…

4.3 数据库HAVING语句

having子句要和group by子句联合起来才能使用&#xff0c;不能单独去使用&#xff0c;接下来咱们看一下为什么要引入having子句语法呢&#xff1f;引入having子句也是出于无奈&#xff0c;因为有些条件查询&#xff0c;用group by子句并不能满足要求&#xff0c;比如说查询部门…

支持向量机入门指南:从原理到实践

目录 1 支持向量机的基本概念 1.2 数学表达 2 间隔与支持向量 2.1 几何间隔 2.2 支持向量的概念 2.3 规范化超平面 2.4 支持向量的深入分析 2.4.1 支持向量的特征 2.4.2 支持向量的作用 2.4.3 支持向量的代数表示 2.5 KKT条件 3 最优化问题 3.1 问题的形成 3.2 规…

使用驱动器光盘需格式化:深度解析与数据恢复全攻略

一、驱动器光盘需格式化的现象概述 在日常使用驱动器光盘的过程中&#xff0c;用户可能会遇到系统提示“驱动器中的磁盘未被格式化&#xff0c;是否现在格式化&#xff1f;”的警告。这一提示通常意味着光盘上的文件系统已损坏或无法被系统正常识别&#xff0c;导致无法读取光…

论文研读:AnimateDiff—通过微调SD,用图片生成动画

1.概述 AnimateDiff 设计了3个模块来微调通用的文生图Stable Diffusion预训练模型, 以较低的消耗实现图片到动画生成。 论文名&#xff1a;AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning 三大模块&#xff1a; 视频域适应…

NPM老是无法install,timeout?npm install失败

NPM老是无法install&#xff0c;timeout&#xff1f; 尝试一下如下操作 一、 更换国内源 npm config set registry https://registry.npmmirror.com npm install或指定源install npm install pkg --registry https://registry.npmmirror.com --legacy-peer-deps如下图 二…

【LeetCode 面试经典150题】详细题解之矩阵篇

【LeetCode 面试经典150题】详细题解之矩阵篇 1 矩阵的基础1.1 表示矩阵1.2 创建矩阵相关题目 2 36.有效的数独 &#xff08;需要复习&#xff09;分析代码 3 54.螺旋矩阵&#xff08;需要复习&#xff09;分析代码 4 48.旋转图像思路代码 5 73.矩阵置零 &#xff08;一遍过&am…

Type-C单口便携显示器LDR6021

Type-C单口便携显示器LDR6021是市场上一种新兴的显示设备&#xff0c;以下是对其的详细介绍&#xff1a; 一、主要特点 便携性&#xff1a;LDR6021采用了Type-C接口作为数据传输和供电接口&#xff0c;这种设计使得它能够与各种支持Type-C接口的设备无缝连接&#xff0c;如笔记…

云途领航:现代应用架构助力企业转型新篇

在数字化转型的浪潮中&#xff0c;现代应用架构为企业带来了灵活性、效率和创新能力。各类服务模型相继出现&#xff0c;为企业提供了强有力的支持&#xff0c;助力其顺利转型。随着技术的快速发展&#xff0c;企业面临的挑战和机遇也在不断演变&#xff0c;这促使它们必须重新…

MyBatis如何处理延迟加载?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis如何处理延迟加载&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis如何处理延迟加载&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 支持 延迟加载&#xff08;Lazy Loading&am…