机械优化设计鲍威尔法编程
鲍威尔法求解二维函数极小值的程序说明
一 题目
利用鲍威尔法求函数221212112(,)242f x x x x x x x =+--的极小值点。
二 鲍威尔法基本思想:
1) 给定初始点0x ,选取初始方向组,它由n 各线性无关的向量000
12,...n d d d 所组成。
2) 从0k x 出发,顺次沿12,,...k k k n d d d 作一维搜索得12,,...k k k n x x x 。接着以k n x 为起点,沿方向10k k k n n d x x +=-
移动一个0k k n x x -的距离,得到 01,,k k k n n x x x +分别称为一轮迭代的始点,终点和反射点。始点,终点,反射点所对应的函数值分
别表示为
同时计算各中间点处的函数值,并记为
因此有002,n F f F f ==
计算n 个函数值之差,记作1i i i f f -?=-
其中最大者记作1max m i m m f f -?=?=-
3) 根据是否满足判别条件
和
来确定是否要对原方向组进行替换。若不满足判别条件,则下轮迭代应对原方向组进行替换,将1k n d +补
充到原方向组的最后位置,而除掉k m d 。即新方向组为1k d ,2k d ,…,1k m d -,1k m d +,…,k n d ,1k
n d +作为下轮迭代的搜索方向。下轮迭代的始点取1k n d +方向进行一维搜索得极小点10k x +。
4) 判断是否满足收敛准则。若满足则取1
0k x +为极小点,否则应置1k k =+,返回2,继续 进行下一轮迭代。
改进后的鲍威尔法程序框图如下: 三 用鲍威尔法求函数
程序如下:
//鲍威尔法Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "鲍威尔法.h"
#include "鲍威尔法Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_x01 = 0.0f;
m_x02 = 0.0f;
m_x1 = 0.0f;
m_x2 = 0.0f;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Text(pDX, IDC_x01, m_x01);
DDX_Text(pDX, IDC_x02, m_x02);
DDX_Text(pDX, IDC_x1, m_x1);
DDX_Text(pDX, IDC_x2, m_x2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMyDlg::OnOK()
{
// TODO: Add extra validation here
//CDialog::OnOK();
UpdateData(true);
int i,n;
double h1,h2,h3,m,flag,X00[2][1],d01[2][1],d02[2][1],d03[2][1]; //确定键的执行程序
double X01[2][1],X02[2][1],X03[2][1];
double F0,F1,F2,F3,e1,e2,em;
double X[2][1];
double f0,f1,f2,f3;
X00[0][0]=m_x01; //对初始搜索点进行赋值
X00[1][0]=m_x02;
d01[0][0]=1,d01[1][0]=0; //初始索索方向的确定
d02[0][0]=0,d02[1][0]=1;
i=1;
do
{
F0=(X00[0][0]*X00[0][0]+2*X00[1][0]*X00[1][0]-4*X00[0][0]-2*X00[0][0]*X00[1][0]),f0=F0; //初始点函数值
h1=(4*d01[0][0]+2*d01[0][0]*X00[1][0]+2*d01[1][0]*X00[0][0])/(2*d01[0][0]*d01[0][0]+
//确定搜索方向
4*d01[1][0]*d01[1][0]-4*d01[1][0]*d01[0][0]);
X01[0][0]=X00[0][0]+h1*d01[0][0],X01[1][0]=X00[1][0]+h1*d01[1][0];
F1=(X01[0][0]*X01[0][0]+2*X01[1][0]*X01[1][0]-4*X01[0][0]-2*X01[0][0]*X01[1][0]),f1=F1; //确定F的函数值
h2=(4*d02[0][0]+2*d02[0][0]*X01[1][0]+2*d02[1][0]*X01[0][0])/(2*d02[0][0]*d02[0][0]+ //确定搜索步长
4*d02[1][0]*d02[1][0]-4*d02[1][0]*d02[0][0]);
X02[0][0]=X01[0][0]+h2*d02[0][0] ;X02[1][0]=X01[1][0]+h2*d02[1][0];
F2=(X02[0][0]*X02[0][0]+2*X02[1][0]*X02[1][0]-4*X02[0][0]-2*X02[0][0]*X02[1][0]),f2=F2;
//确定F2的函数值
e1=f0-f1;
//进行判定
e2=f1-f2;
if(e1>e2) em=e1,m=1;
else em=e2,m=2;
//////////////////////////////////////////////////////////////////////////////
d03[0][0]=X02[0][0]-X00[0][0];
d03[1][0]=X02[1][0]-X00[1][0];
X03[0][0]=2*X02[0][0]-X00[0][0];
X03[1][0]=2*X02[1][0]-X00[1][0];
F3=(X03[0][0]*X03[0][0]+2*X03[1][0]*X03[1][0]-4*X03[0][0]-2*X03[0][0]*X03[1][0]),f3=F3; //确定F3的函数值
while (F3>=F0 && (F0-2*F2+F3)*(F0-F2-em)*(F0-F2-em)>=0.5*(F0-F3)*(F0-F3)) //不满足判别条件
{
i++;
if (F2 { X00[0][0]=X02[0][0],X00[1][0]=X02[1][0]; //以函数最小者作为下轮迭代的始点 F0=(X00[0][0]*X00[0][0]+2*X00[1][0]*X00[1][0]-4*X00[0][0]-2*X00[0][0]*X00[1][0]),f0=F0; //进行第二轮搜索 h1=(4*d01[0][0]+2*d01[0][0]*X00[1][0]+2*d01[1][0]*X00[0][0])/(2*d01[0][0]*d01[0][0]+ //确定步长4*d01[1][0]*d01[1][0]-4*d01[1][0]*d01[0][0]); X01[0][0]=X00[0][0]+h1*d01[0][0],X01[1][0]=X00[1][0]+h1*d01[1][0]; F1=(X01[0][0]*X01[0][0]+2*X01[1][0]*X01[1][0]-4*X01[0][0]-2*X01[0][0]*X01[1][0]),f1=F1; //确定函数值 h2=(4*d02[0][0]+2*d02[0][0]*X01[1][0]+2*d02[1][0]*X01[0][0])/(2*d02[0][0]*d02[0][0]+ //确定步长 4*d02[1][0]*d02[1][0]-4*d02[1][0]*d02[0][0]); X02[0][0]=X01[0][0]+h2*d02[0][0] ;X02[1][0]=X01[1][0]+h2*d02[1][0]; F2=(X02[0][0]*X02[0][0]+2*X02[1][0]*X02[1][0]-4*X02[0][0]-2*X02[0][0]*X02[1][0]),f2=F2; //确定函数值 e1=f0-f1; e2=f1-f2; if(e1>e2) em=e1,m=1; //进行判断 else em=e2,m=2; d03[0][0]=X02[0][0]-X00[0][0]; //确定新的搜索方向 d03[1][0]=X02[1][0]-X00[1][0]; X03[0][0]=2*X02[0][0]-X00[0][0]; X03[1][0]=2*X02[1][0]-X00[1][0]; F3=(X03[0][0]*X03[0][0]+2*X03[1][0]*X03[1][0]-4*X03[0][0]-2*X03[0][0]*X03[1][0]),f3=F3; //确定函数值 } else { X00[0][0]=X03[0][0],X00[1][0]=X03[1][0]; F0=(X00[0][0]*X00[0][0]+2*X00[1][0]*X00[1][0]-4*X00[0][0]-2*X00[0][0]*X00[1][0]),f0=F0; h1=(4*d01[0][0]+2*d01[0][0]*X00[1][0]+2*d01[1][0]*X00[0][0])/(2*d01[0][0]*d01[0][0]+ 4*d01[1][0]*d01[1][0]-4*d01[1][0]*d01[0][0]); X01[0][0]=X00[0][0]+h1*d01[0][0],X01[1][0]=X00[1][0]+h1*d01[1][0]; F1=(X01[0][0]*X01[0][0]+2*X01[1][0]*X01[1][0]-4*X01[0][0]-2*X01[0][0]*X01[1][0]),f1=F1; h2=(4*d02[0][0]+2*d02[0][0]*X01[1][0]+2*d02[1][0]*X01[0][0])/(2*d02[0][0]*d02[0][0]+ 4*d02[1][0]*d02[1][0]-4*d02[1][0]*d02[0][0]); X02[0][0]=X01[0][0]+h2*d02[0][0] ;X02[1][0]=X01[1][0]+h2*d02[1][0]; F2=(X02[0][0]*X02[0][0]+2*X02[1][0]*X02[1][0]-4*X02[0][0]-2*X02[0][0]*X02[1][0]),f2=F2; e1=f0-f1; e2=f1-f2; if(e1>e2) em=e1,m=1; else em=e2,m=2; d03[0][0]=X02[0][0]-X00[0][0]; d03[1][0]=X02[1][0]-X00[1][0]; X03[0][0]=2*X02[0][0]-X00[0][0]; X03[1][0]=2*X02[1][0]-X00[1][0]; F3=(X03[0][0]*X03[0][0]+2*X03[1][0]*X03[1][0]-4*X03[0][0]-2*X03[0][0]*X03[1][0]),f3=F3; } } if(m=1) d01[0][0]=d03[0][0],d01[1][0]=d03[1][0]; else { if(m=2) d02[0][0]=d03[0][0],d02[1][0]=d03[1][0]; } h3=(4*d03[0][0]+2*d03[0][0]*X02[1][0]+2*d03[1][0]*X02[0][0])/(2*d03[0][0]*d03[0][0]+ 4*d03[1][0]*d03[1][0]-4*d03[1][0]*d03[0][0]); X00[0][0]=X02[0][0]+h3*d03[0][0]; X00[1][0]=X02[1][0]+h3*d03[1][0]; if(i=2) break; } while (abs(X02[0][0]-X00[0][0])>0.001&&abs(X02[1][0]-X00[1][0])>0.001); //输出极小值点 X[0][0]=X00[0][0],X[1][0]=X00[1][0]; m_x1=X[0][0]; m_x2=X[1][0]; UpdateData(false); } 程序运行结果: 四结论 由该程序的运行结果可知,要求函数的极小值的在(10,5)处。该程序利用VC++6.0下的MFC插件,创建对话框,将运算结果很形象的表现出来。经验证,运算结果完全正确。验证了该程序的可行性。 基于MATLAB工具箱的机械优化设计 长江大学机械工程学院机械11005班刘刚 摘要:机械优化设计是一种非常重要的现代设计方法,能从众多的设计方案中找出最佳方案,从而大大提高设计效率和质量。本文系统介绍了机械优化设计的研究内容及常规数学模型建立的方法,同时本文通过应用实例列举出了MATLAB 在工程上的应用。 关键词:机械优化设计;应用实例;MATLAB工具箱;优化目标 优化设计是20世纪60年代随计算机技术发展起来的一门新学科, 是构成和推进现代设计方法产生与发展的重要内容。机械优化设计是综合性和实用性都很强的理论和技术, 为机械设计提供了一种可靠、高效的科学设计方法, 使设计者由被动地分析、校核进入主动设计, 能节约原材料, 降低成本, 缩短设计周期, 提高设计效率和水平, 提升企业竞争力、经济效益与社会效益。国内外相关学者和科研人员对优化设计理论方法及其应用研究十分重视, 并开展了大量工作, 其基本理论和求解手段已逐渐成熟。 国内优化设计起步较晚, 但在众多学者和科研人员的不懈努力下, 机械优化设计发展迅猛, 在理论上和工程应用中都取得了很大进步和丰硕成果, 但与国外先进优化技术相比还存在一定差距, 在实际工程中发挥效益的优化设计方案或设计结果所占比例不大。计算机等辅助设备性能的提高、科技与市场的双重驱动, 使得优化技术在机械设计和制造中的应用得到了长足发展, 遗传算法、神经网络、粒子群法等智能优化方法也在优化设计中得到了成功应用。目前, 优化设计已成为航空航天、汽车制造等很多行业生产过程的一个必须且至关重要的环节。 一、机械优化设计研究内容概述 机械优化设计是一种现代、科学的设计方法, 集思考、绘图、计算、实验于一体, 其结果不仅“可行”, 而且“最优”。该“最优”是相对的, 随着科技的发展以及设计条件的改变, 最优标准也将发生变化。优化设计反映了人们对客观世界认识的深化, 要求人们根据事物的客观规律, 在一定的物质基和技术条件下充分发挥人的主观能动性, 得出最优的设计方案。 优化设计的思想是最优设计, 利用数学手段建立满足设计要求优化模型; 方法是优化方法, 使方案参数沿着方案更好的方向自动调整, 以从众多可行设计方案中选出最优方案; 手段是计算机, 计算机运算速度极快, 能够从大量方案中选出“最优方案“。尽管建模时需作适当简化, 可能使结果不一定完全可行或实际最优, 但其基于客观规律和数据, 又不需要太多费用, 因此具有经验类比或试验手段无可比拟的优点, 如果再辅之以适当经验和试验, 就能得到一个较圆满的优化设计结果。 传统设计也追求最优结果, 通常在调查分析基础上, 根据设计要求和实践 人字架的优化设计 一、问题描述 如图1所示的人字架由两个钢管组成,其顶点受外力2F=3×105N 。已知人字架跨度2B=152 cm,钢管壁厚T=0.25cm,钢管材料的弹性模量E=2.15 10? MPa ,材料密度p=7.8×103 kg /m ,许用压应力δy =420 MPa 。求钢管压应力δ不超过许用压应力 δy 和失稳临界应力 δc 的条件下,人字架的高h 和钢管平均直径D 使钢管总质量m 为最小。 二、分析 设计变量:平均直径D 、高度h 三、数学建模 所设计的空心传动轴应满足以下条件: (1) 强度约束条件 即 δ≤?? ????y δ 经整理得 ( ) []y hTD h B F δπ≤+2 122 (2) 稳定性约束条件: []c δδ≤ ( ) ( ) ( ) 2 22 222 122 8h B D T E hTD h B F ++≤+ππ (3)取值范围: 12010≤≤D 1000200≤≤h 则目标函数为:()22 13 57760010 5224.122min x x x f +?=- 约束条件为:0420577600106)(2 12 2 41≤-+?=x Tx x X g π () 057760025.63272.259078577600106)(2 2 212 12 2 42≤++-+?= X x x x Tx x g π010)(13≤-=x X g 0120)(14≤-=x X g 0200)(25≤-=x X g 01000)(26≤-=x X g 四、优化方法、编程及结果分析 1优化方法 综合上述分析可得优化数学模型为:()T x x X 21,=;)(min x f ;()0..≤x g t s i 。 考察该模型,它是一个具有2个设计变量,6个约束条件的有约束非线性的单目标最优化问题,属于小型优化设计,故采用SUMT 惩罚函数内点法求解。 2方法原理 内点惩罚函数法简称内点法,这种方法将新目标函数定义于可行域内,序列迭代点在可行域内逐步逼近约束边界上的最优点。内点法只能用来求解具有不等式约束的优化问题。 对于只具有不等式约束的优化问题 浅析机械优化设计方法基本理论 【摘要】在机械优化设计的实践中,机械优化设计是一种非常重要的现代设计方法,能从众多的设计方案中找出最佳方案,从而大大提高设计的效率和质量。每一种优化方法都是针对某一种问题而产生的,都有各自的特点和各自的应用领城。在综合大量文献的基础上,总结机械优化设计的特点,着重分析常用的机械优化设计方法,包括无约束优化设计方法、约束优化设计方法、基因遗传算方法等并提出评判的主 要性能指标。 【关键词】机械;优化设计;方法特点;评价指标 一、机械优化概述 机械优化设计是适应生产现代化要求发展起来的一门科学,它包括机械优化设计、机械零部件优化设计、机械结构参数和形状的优化设计等诸多内容。该领域的研究和应用进展非常迅速,并且取得了可观的经济效益,在科技发达国家已将优化设计列为科技人员的基本职业训练项目。随着科技的发展,现代化机械优化设计方法主要以数学规划为核心,以计算机为工具,向着多变量、多目标、高效率、高精度方向发展。]1[ 优化设计方法的分类优化设计的类别很多,从不同的角度出发,可以做出各种不同的分类。按目标函数的多少,可分为单目标优化设计方法和多目标优化设计方法按维数,可分为一维优化设计方法和多维优化设计方法按约束情况,可分为无约束优化设计方法和约束优化设计方法按寻优途径,可分为数值法、解析法、图解法、实验法和情况研究法按优化设计问题能否用数学模型表达,可分为能用数学模型表达的优化设计问题其寻优途径为数学方法,如数学规划法、最优控制法等。 1.1 设计变量 设计变量是指在设计过程中进行选择并最终必须确定的各项独立参数,在优化过程中,这些参数就是自变量,一旦设计变量全部确定,设计方案也就完全确定了。设计变量的数目确定优化设计的维数,设计变量数目越多,设计空间的维数越大。优化设计工作越复杂,同时效益也越显著,因此在选择设计变量时。必须兼顾优化效果的显著性和优化过程的复杂性。 机械优化设计——复合形方法及源程序 (一) 题目:用复合形法求约束优化问题 ()()()2221645min -+-=x x x f ;0642 2211≤--=x x g ;01013≤-=x g 的最优解。 基本思路:在可行域中构造一个具有K 个顶点的初始复合形。对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。 (二) 复合形法的计算步骤 1)选择复合形的顶点数k ,一般取n k n 21≤≤+,在可行域内构成具有k 个顶点的初始复合形。 2)计算复合形个顶点的目标函数值,比较其大小,找出最好点x L 、最坏点x H 、及此坏点x G .. 3)计算除去最坏点x H 以外的(k-1)个顶点的中心x C 。判别x C 是否可行,若x C 为可行点,则转步骤4);若x C 为非可行点,则重新确定设计变量的下限和上限值,即令C L x b x a ==,,然后转步骤1),重新构造初始复合形。 4)按式()H C C R x x x x -+=α计算反射点x R,必要时改变反射系数α的值,直至反射成功,即满足式()()()()H R R j x f x f m j x g ?=≤;,2,1,0,。然后x R以取代x H,构成新的复合形。 5)若收敛条件()()[] ε≤?? ? ?????--∑=2 1 1211k j L j x f x f k 得到满足,计算终止。约束最优解为:() ()L L x f x f x x ==*,*。 (三) 复合形法程序框图见下图: 优化设计案例分析 优化设计是在给定的设计指标和限制条件下,运用最优化原理和方法,在电子计算机上进行自动调优计算,从而选定出最优设计参数,使设计指标达到最优值。该最优设计参数就是一个最优设计方案。所谓设计指标,就机械设计而言,一般是指重量轻、能耗小、刚性大、成本低等;所谓限制条件,是指强度要求、刚度要求、尺寸范围要求等。 设计变量选择 一个设计方案可以用一组基本参数的数值来表示,这些基本参数可以是构件尺寸等几何量,也可以是质量等物理量,还可以是应力、变形等表示工作性能的导出量。在设计过程中进行选择并最终必须确定的各项独立的基本参数,称作设计变量,又叫做优化参数。在充分了解设计要求的基础上,根据各设计参数对目标函数的影响程度分析其主次,尽量减少设计变量的数目,以简化优化设计问题。注意各设计变量应相互独立,避免耦合情况的发生,否则会使目标函数出现“山脊”或“沟谷”,给优化带来困难。 目标函数与约束的确定 对于一般机械,可按重量最轻或体积最小建立目标函数;对应力集中现象突出的构件,以应力集中系数最小为目标;对精密仪器,应按其精度最高或误差最小的要求建立目标函数。约束条件是就工程设计本身而提出的对设计变量取值范围的限制条件,目前尚无一套完整的评价方法来检验哪些约束是必须,哪些约束是可忽略的,通常是凭经验取舍,不可避免会带来模型和现实系统的不相吻合。在最优化设计问题中,可以只有一个目标函数,称为单目标函数。当在同一设计中要提出多个目标函数时,这种问题称为多目标函数的最优化问题。在一般的机械最优化设计中,多目标函数的情况较多。目标函数愈多,设计的综合效果愈好,但问题的求解亦愈复杂。对于复杂的问题,要建立能反映客观工程实际的、完善的数学模型往往会遇到很多困难,有时甚至比求解更为复杂。这时要抓住关键因素,适当忽略不重要的成分,使问题合理简化,以易于列出数学模型,这样不仅可节省时间,有时也会改善优化结果。 数学模型确立 数学模型越精确,设计变量越多,维数越大,建模越复杂,优化进程越慢;但数学模型忽略过多元素,则难以确切凸现结构的特殊之处。故要结合工程实际和优化设计经验,把握与研究目标相关程度大的因素,尽可能的建立确切、简洁的数学模型。然后通过基于统计理论的检验方法———t 检验/F 检验/ X2检验/ 拟合优度检验等,分析模型的置信区间,对模型有效性进行评价,提高模型的准确度。 下面以机票销售策略案例进行说明 某航空公司每天有三个航班服务于A, B, C, H四个城市,其中城市H是可供转机使用的, 三个航班的出发地-目的地分别为AH, HB, HC,可搭乘旅客的最大数量分别为120人, 100人, 110人, 机票的价格分头等舱和经济舱两类. 经过市场调查,公司销售部得到了每天旅客的相关信息, 见表1. 该公司应该在每条航线上分别分配多少头等舱和经济舱的机票?机械优化设计论文(基于MATLAB工具箱的机械优化设计)
机械优化设计实例(人字架优化)讲课教案
机械优化设计方法论文
机械优化设计——复合形方法及源程序
机械优化设计案例分析
机械优化设计复习总结.doc