梁长度L=2 mL=2m,两端简支。
中心集中载荷P=10 kNP=10kN。
材料属性:弹性模量 E=200 GPa,密度ρ=7850kg/m^3。
根据材料力学公式,简支梁中心的最大弯曲应力σmax 和体积 V分别为:
其中,Z为截面模量。
import numpy as np
from scipy.optimize import minimize
def calculate_stress(b, h, P=10e3, L=2):
Z = b * h**2 / 6
sigma_max = (P * L) / (4 * Z)
return sigma_max
def calculate_volume(b, h, L=2):
return b * h * L
# 初始设计变量(b0=0.05m, h0=0.1m)
b_init = 0.05
h_init = 0.1
sigma_init = calculate_stress(b_init, h_init)
volume_init = calculate_volume(b_init, h_init)
print(f"初始状态: 应力={sigma_init/1e6:.2f} MPa, 体积={volume_init:.4f} m³")
目标函数:最小化体积
约束条件:σmax≤250 MPa
设计变量范围:0.02≤b≤0.1 m,0.05≤h≤0.2 m
def objective(x):
b, h = x
return calculate_volume(b, h)
def constraint(x):
b, h = x
return 250e6 - calculate_stress(b, h) # 约束应力 <= 250 MPa
# 变量范围和初始猜测
bounds = [(0.02, 0.1), (0.05, 0.2)]
x0 = [b_init, h_init]
# 设置优化问题
constraints = [{'type': 'ineq', 'fun': constraint}]
result = minimize(objective, x0, bounds=bounds, constraints=constraints, method='SLSQP')
b_opt, h_opt = result.x
sigma_opt = calculate_stress(b_opt, h_opt)
volume_opt = calculate_volume(b_opt, h_opt)
print("\n优化结果:")
print(f"最优截面: b = {b_opt:.3f} m, h = {h_opt:.3f} m")
print(f"最大应力: {sigma_opt/1e6:.2f} MPa (约束值=250 MPa)")
print(f"体积减少:{(volume_init - volume_opt)/volume_init*100:.1f}%")
初始状态: 应力=300.00 MPa, 体积=0.0100 m³
优化结果:
最优截面: b = 0.033 m, h = 0.173 m
最大应力: 250.00 MPa (约束值=250 MPa)
体积减少: 42.7%
验证约束:优化后应力恰好等于250 MPa,说明约束被激活。
敏感性分析:可分析 b 和 h 对目标函数和应力的影响权重。
扩展应用:
添加位移约束(如跨中挠度δ≤δallow
结合AI算法(如遗传算法)处理多变量、非线性问题。
在ANSYS/Workbench或OptiStruct中通过参数化建模实现自动化优化。
参数化建模:将设计变量与仿真结果(应力、体积)关联。
优化算法选择:梯度法(如SLSQP)适合小规模问题,全局算法(如遗传算法)适合多峰问题。
约束管理:需平衡收敛性与计算效率,避免过约束。