4-2 已知某汽车行驶速度x与每公里耗油量的函数关系为f(x)=x+ 20/x,试用0.618法确定速度x 在每分钟0.2~1公里时的经济速度x*。
精度ε=0.01.Private Sub Command1_Click()a = 0.2b = 110: a1 = b - 0.618 * (b - a)a2 = a + 0.618 * (b - a)f1 = a1 + 20 / a1f2 = a2 + 20 / a2If f1 < =f2 Then b = a2: a2 = a1: f2 = f1: a1 = b - 0.618 * (b - a): f1 = a1 + 20 / a1If f1 > f2 Then a = a1: a1 = a2: f1 = f2: a2 = a + 0.618 * (b - a): f2 = a2 + 20 / a2If Abs(b - a) >= 0.01 Then GoTo 10Print "a*="; (a + b) / 2t = (a + b) / 2Print "f*="; t + 20 / tEnd Sub运行结果:最终结果:a*=0.996749540627092f*=21.06197072690155-1 试用变量轮换法求目标函数f(X) = 4 + 29x1 - 4x2 + x12 + 2x22 - 2x1x2 + x14 - 2x12x2的最优解。
初始点X(0) = [-2,2.2]T,精度ε= 0.000001。
Private Sub Command1_Click()n = 2: E = 0.000001Dim X(2), X0(2), P(2, 2)For j = 1 To 2X0(j) = InputBox(X0(j), "输入X0 的x、y坐标") X(j) = X0(j)Next jGoSub 630K = 0For i = 1 To 2For j = 1 To 2P(i, j) = 0If i = j Then P(i, j) = 1Next j, i260: F0 = FFor i = 1 To 2GoSub 470Next iR = 0: K = K + 1: Print FFor j = 1 To 2R = R + (X(j) - X0(j)) ^ 2Next jR = Sqr(R)If R < E Then GoTo 420i = nGoSub 470For j = 1 To 2X0(j) = X(j)Next jGoTo 260470: H = 1: FX = 0480: GoSub 600F1 = F: FX = FX + 1If F1 > F0 And FX > 1 Then GoTo 540If F1 > F0 And FX = 1 Then H = -HF0 = F1: H = 2 * HGoTo 480540: H = -0.5 * HIf 10000 * Abs(H) < E Then Return560: GoSub 600F0 = F1: F1 = FIf F1 < F0 Then GoTo 560GoTo 540600: For j = 1 To 2X(j) = X(j) + H * P(i, j)Next j630: F = 4 + 2 / 9 * X(1) - 4 * X(2) + X(1) ^ 2 + 2 * X(2) ^ 2 - 2 * X(1) * X(2) + X(1) ^ 4 - 2 * X(1) ^ 2 * X(2) Return420: For j = 1 To 2Print "x*("; j; ")="; X(j)Next jPrint K; "f*="; FEnd Sub运行结果如下:最优解:X1*= 2.314163X2*=4.834757F* = -8.200358最小体积二级圆柱齿轮减速器的最优设计如图所示的二级斜圆柱齿轮减速器,高速轴输入功率P1 = 4.5kw,高速轴转速n1 = 1450rpm,总传动比iΣ= 31.5,此轮的齿宽系数ψa= 0.4;齿轮材料和热处理大齿轮45号钢正火HB = 187~207,小齿轮45号钢调质HB = 228~255.总工作时间不少于10年。
要求按总中心距aΣ最小来确定总体方案中的各个主要参数。
减速器的总中心距计算公式为aΣ= a1 + a2 = 12cosβ[m n1Z1(1+i1) + m n2Z3(1 + i2)]式中m n1,m n2——高速级与低速级的齿轮法面模数,mmi1,i2——高速级与低速级传动比Z1,Z3——高速级与低速级小齿轮齿数β——齿轮的螺旋角1. 选取设计变量计算总中心距涉及的独立参数有,故取X = [m n1,m n2,Z1,Z3,i1,β]T = [x1,x2,x3,x4,x5,x6]T2. 建立目标函数f(X) = [x1x3 (1+x5) + x2x4 (1 + 31.5/ x5)]/(2cos x6)3. 确定约束条件(1)确定约束条件的上下界限从传递功率与转速可估计2≤m n1≤5 标准值(2,2.5,3,4,5)2≤m n2≤6 标准值(3.5,4,5,6)综合考虑传动平稳、轴向力不可太大,能满足短期过载,高速级与低速级大齿轮浸油深度大致相近,轴齿轮的分度圆尺寸不能太小等因素,取:14≤Z1≤2216≤Z3≤225.8≤i1≤780≤β≤150由此建立12个不等式约束条件式g1(X) = x1– 2 ≥0g2(X) = 5 –x1≥0g3(X) = x2– 3.5≥0g4(X) = 6 –x2≥0g5(X) = x3– 14≥0g6(X) = 22 –x3≥0g7(X) = x4– 16≥0g8(X) = 22 –x4≥0g9(X) = x5– 5.8≥0g10(X) = 7 –x5≥0g11(X) = x6–0.1396≥0g12(X) = 0.2618 –x6≥0(已将角度化成弧度)(2)按齿面接触强度公式δH = 925a()i + 13KT1bi≤ [δH],N/mm2得到高速级和低速级齿面接触强度条件分别为[δH]2m n13Z13i1ψa8(925)2K1T1– cos3β≥0 ①[δH]2m n23Z33i2ψa8(925)2K2T2– cos3β≥0 ②式中,[δH]——许用接触应力,MpaT1,T2——分别为高速轴I和中间轴II的转矩,N·mmK1,K2——分别为高速级和低速级载荷系数.(3)按轮齿弯曲强度计算公式δF1 = 1.5 K1T1bd1 m n1y1≤ [δF]1,N·mm2δF2 = δF1 y1y2≤ [δF]2,N·mm2得到高速级和低速级大小齿轮的弯曲强度条件分别为[δF]1ψa y13 K1T1(1 + i1) m n13Z12– cos2β≥0 ③[δF]2ψa y23 K1T1(1 + i1) m n13Z12– cos2β≥0 ④和[δF]3ψa y33 K2T2(1 + i2) m n23Z32– cos2β≥0 ⑤[δF]4ψa y43 K2T2(1 + i2) m n23Z32– cos2β≥0⑥其中[δF]1,[δF]2,[δF]3,[δF]4——分别为齿轮1,2,3,4的许用弯曲应力,N/mm2;y1,y2,y3,y4——分别为齿轮1,2,3,4的齿形系数.(4)按高速级大齿轮与低速轴不干涉相碰的条件a2–E– de2/2≥0得m n2Z3(1 + i2) – 2 cosβ(E + m n1) –m n1Z1i1≥0 ⑦式中E——低速轴轴线与高速级大齿轮齿顶圆之间的距离,mm;de2——高速级大齿轮齿的齿顶圆直径,mm.对式①至⑦代入有关数据:[δH] = 518.75 N·mm2[δF]1= [δF]3= 153.5 N·mm,[δF]2= [δF]4= 141.6 N·mm2T1 =29638 N·mm,T2 = 28749i1 N·mmK1 = 1.225,K2 = 1.204y1=0.248,y2=0.302,y3=0.256,y4=0.302E = 50mm得g13(X) = 4.331×10-7x13x33x5– cos3x6≥0g14(X) = 1.431×10-5x23x43–x5cos3x6≥0g15(X) = 1.398×10-4(1 + x5)x13x32– cos2x6≥0g18(X) = 1.570×10-4(1 + x5)x13x32– cos2x6≥0g16(X) = 1.514×10-4(31.5 + x5)x23x42–x52cos2x6≥0g19(X) = 1.647×10-4(31.5 + x5)x23x42–x52cos2x6≥0g17(X) = x2x4 (31.5 + x5) – 2x5cos x6 (x1+50) –x1x3x52≥0g18(X)、g19(X)和g15(X)、g16(X)相比为明显的消极约束,可省略。
共取g1(X)至g17(X)的17个约束条件。
4. 选用合适的算法求解这一约束问题采用复合形法求解。
在进行优化的过程中,6个变量都是作为连续变量处理的,因为齿轮的齿数应为整数,模数应取标准模数,所以最后对结果进行适当调整。
Private Sub Command1_Click()N = 6: E = 0.01Dim X(13, 6), F(13), A(6), B(6)For j = 1 To 6A(j) = InputBox(A(j), "输入估计边界的下界")B(j) = InputBox(B(j), "输入估计边界的上界")Next j180: For I = 1 To 12190: GoSub 730If AA = 0 Then GoTo 190Next II0 = 1: I1 = 1: I2 = 1: K = 0240: For I = 1 To 12If F(I) > F(I0) Then I1 = I0: I0 = I: GoTo 280If F(I) > F(I1) Then I1 = IIf F(I) < F(I2) Then I2 = I280: Next IK = K + 1: R = 0For j = 1 To 6R = R + (X(I0, j) - X(I2, j)) ^ 2Next jIf Sqr(R) < E Then ZZ = 0: GoTo 670340: For j = 1 To 6X(0, j) = 0For I = 1 To 12X(0, j) = X(0, j) + X(I, j)Next IX(0, j) = (X(0, j) - X(I0, j)) / 11Next jI = 0GoSub 760If AA = 1 Then GoTo 480For j = 1 To 6A(j) = X(I2, j): B(j) = X(0, j): X(1, j) = X(I2, j) Next jGoTo 180480: H = 1.3: I = 13490: For j = 1 To 6X(13, j) = X(0, j) + H * (X(0, j) - X(10, j)) Next jGoSub 760H = H / 2If AA = 0 Then GoTo 490If F(13) >= F(I1) Then GoTo 610For j = 1 To 6X(I0, j) = X(13, j)Next jF(I0) = F(13)GoTo 240610: If H > E Then GoTo 490730: For j = 1 To 6X(I, j) = A(j) + Rnd(1) * (B(j) - A(j))Next j760: AA = 0g1 = X(I, 1) - 2g2 = 5 - X(I, 1)g3 = X(I, 2) - 3.5g4 = 6 - X(I, 2)g5 = X(I, 3) - 14g6 = 22 - X(I, 3)g7 = X(I, 4) - 16g8 = 22 - X(I, 4)g9 = X(I, 5) - 5.8g10 = 7 - X(I, 5)g11 = X(I, 6) - 0.1396g12 = 0.2618 - X(I, 6)g13 = 4.331 * 10 ^ -7 * X(I, 1) ^ 3 * X(I, 3) ^ 3 * X(I, 5) - Cos(X(I, 6)) ^ 3g13 = 1.431 * 10 ^ -5 * X(I, 2) ^ 3 * X(I, 4) ^ 3 - X(I, 5) * Cos(X(I, 6)) ^ 3g15 = 1.398 * 10 ^ -4 * (1 + X(I, 5)) * X(I, 1) ^ 3 * X(I, 3) ^ 2 - Cos(X(I, 6)) ^ 2g16 = 1.514 * 10 ^ -4 * (31.5 + X(I, 5)) * X(I, 2) ^ 3 * X(I, 4) ^ 2 - X(I, 5) ^ 2 * Cos(X(I, 6)) ^ 2 g17 = X(I, 2) * X(I, 4) * (31.5 + X(I, 5)) - 2 * X(I, 5) * Cos(X(I, 6)) * (X(I, 1) + 50) - X(I, 1) * X(I, 3) * X(I, 5) ^ 2If g1 >= 0 And g2 >= 0 And g3 >= 0 And g4 >= 0 And g5 >= 0 And g6 >= 0 And g7 >= 0 And g8 >= 0 And g9 >= 0 And g10 >= 0 And g11 >= 0 And g12 >= 0 And g13 >= 0 And g14 >= 0 And g15 >= 0 And g16 >= 0 And g17 >= 0 Then GoTo 800Return800: AA = 1F(I) = (X(I, 1) * X(I, 3) * (1 + X(I, 5)) + X(I, 2) * X(I, 4) * (1 + 31.5 / X(I, 5))) / (2 * Cos(X(I, 6))) ReturnFor j = 1 To 6C = X(I0, j): X(I0, j) = X(I1, j): X(I1, j) = CNext jC = F(I0): F(I0) = F(I1): F(I1) = C: ZZ = 1670: PrintFor j = 1 To 6Print "x*("; j; ")="; X(I2, j)Next jPrint K; "F*="; F(I2)If ZZ = 1 Then GoTo 340End Sub运算结果如下:齿数取整数,模数取标准模数,取m n1=2.5,m n2=5,取Z1=15,Z3=18,i1=6.24,β=0.164215rad,则i2=5.05,Z2=94,Z4=91,螺旋角β=9024' 32''。