机械优化设计程序

合集下载

第1章优化设计概述

第1章优化设计概述

(3)设计约束条件:
(a)体积要求 (b)长度要求
太原工业学院机械工程系
1.2 机械优化设计的设计简例 设计变量:
x1 , x2 , x3
目标函数: min S x1 x2 2( x2 x3 x1 x3 ) 约束条件:
g1 x1 5 g 2 x2 0 g 3 x3 0 h1 x1 x2 x3 100

第三阶段 工程优化:近二十余年来,计算机技术的发展给解决复杂工 程优化问题提供了新的可能,非数学领域专家开发了一些工程优化方法, 能解决不少传统数学规划方法不能胜任的工程优化问题。在处理多目标工 程优化问题中,基于经验和直觉的方法得到了更多的应用。优化过程和方 法学研究,尤其是建模策略研究引起重视,开辟了提高工程优化效率的新 的途径。
1.2 机械优化设计的设计简例
无盖箱的优化设计
用一块边长为3cm的正方形薄板,在四角各裁去一个大小 相同的方块,做成一个无盖箱子。试确定如何裁剪可以做成的 箱子具有最大的容积。
分析:
(1)目标:裁剪高,箱子具有最大的容积。 (2)设计参数确定:裁剪小正方形的边长x ;
(3)设计约束条件:体积要求
设计目标:
2016/8/20
太原工业学院机械工程系
4. 优化方法
实际问题表达成的函数类型很多:
确定型、不确定型函数; 线形、非线形(二次、高次、超越)函数。
变量类型也很多:
连续、离散、随机变量等等。
产生很多的优化算法:
无约束优化、约束优化: 单目标函数优化、多目标函数优化; 连续变量优化、离散变量优化、随机变量优化。
(d)最小齿数要求
2016/8/20
太原工业学院机械工程系

机械优化设计三个案例

机械优化设计三个案例

机械优化设计案例11. 题目对一对单级圆柱齿轮减速器,以体积最小为目标进行优化设计。

2.已知条件已知数输入功p=58kw ,输入转速n 1=1000r/min ,齿数比u=5,齿轮的许用应力[δ]H =550Mpa ,许用弯曲应力[δ]F =400Mpa 。

3.建立优化模型3.1问题分析及设计变量的确定由已知条件得求在满足零件刚度和强度条件下,使减速器体积最小的各项设计参数。

由于齿轮和轴的尺寸(即壳体内的零件)是决定减速器体积的依据,故可按它们的体积之和最小的原则建立目标函数。

单机圆柱齿轮减速器的齿轮和轴的体积可近似的表示为:]3228)6.110(05.005.2)10(8.0[25.087)(25.0))((25.0)(25.0)(25.0222122212221222212212122221222120222222222121z z z z z z z z z z z g g z z d d l d d m u m z b bd m u m z b b d b u z m b d b z m d d d d l c d d D c b d d b d d b v +++---+---+-=++++-----+-=πππππππ式中符号意义由结构图给出,其计算公式为b c d m u m z d d d mu m z D m z d m z d z z g g 2.0)6.110(25.0,6.110,21022122211=--==-===由上式知,齿数比给定之后,体积取决于b 、z 1 、m 、l 、d z1 和d z2 六个参数,则设计变量可取为T z z T d d l m z b x x x x x x x ][][211654321==3.2目标函数为min)32286.18.092.0858575.4(785398.0)(2625262425246316321251261231232123221→++++-+-+-+=x x x x x x x x x x x x x x x x x x x x x x x x x x f3.3约束条件的建立1)为避免发生根切,应有min z z ≥17=,得017)(21≤-=x x g2 )齿宽应满足max min ϕϕ≤≤d b,min ϕ和max ϕ为齿宽系数d ϕ的最大值和最小值,一般取min ϕ=0.9,max ϕ=1.4,得04.1)()(0)(9.0)(32133212≤-=≤-=x x x x g x x x x g3)动力传递的齿轮模数应大于2mm ,得 02)(34≤-=x x g4)为了限制大齿轮的直径不至过大,小齿轮的直径不能大于max 1d ,得0300)(325≤-=x x x g 5)齿轮轴直径的范围:max min z z z d d d ≤≤得0200)(0130)(0150)(0100)(69685756≤-=≤-=≤-=≤-=x x g x x g x x g x x g 6)轴的支撑距离l 按结构关系,应满足条件:l 2min 5.02z d b +∆+≥(可取min ∆=20),得0405.0)(46110≤--+=x x x x g7)齿轮的接触应力和弯曲应力应不大于许用值,得400)10394.010177.02824.0(7098)(0400)10854.0106666.0169.0(7098)(0550)(1468250)(224222321132242223211213211≤-⨯-⨯+=≤-⨯-⨯+=≤-=---x x x x x x g x x x x x x g x x x x g8)齿轮轴的最大挠度max δ不大于许用值][δ,得0003.0)(04.117)(445324414≤-=x x x x x x g 9)齿轮轴的弯曲应力w δ不大于许用值w ][δ,得5.5106)1085.2(1)(05.5104.2)1085.2(1)(1223246361612232463515≤-⨯+⨯=≤-⨯+⨯=x x x x x g x x x x x g4.优化方法的选择由于该问题有6个设计变量,16个约束条件的优化设计问题,采用传统的优化设计方法比较繁琐,比较复杂,所以选用Matlab 优化工具箱中的fmincon 函数来求解此非线性优化问题,避免了较为繁重的计算过程。

优化设计技术

优化设计技术

机械优化设计摘要机械优化设计是最优化技术在机械设计领域的移植和应用,其基本思想是根据机械设计的理论,方法和标准规范等建立一反映工程设计问题和符合数学规划要求的数学模型,然后采用数学规划方法和计算机计算技术自动找出设计问题的最优方案。

作为一门新兴学科,它建立在数学规划理论和计算机程序设计基础上,通过计算机的数值计算,能从众多的设计方案中寻到尽可能完善的或最适宜的设计方案,使期望的经济指标达到最优,它可以成功地解决解析等其它方法难以解决的复杂问题。

优化设计为工程设计提供了一种重要的科学设计方法。

因而采用这种设计方法能大大提高设计效率和设计质量。

本文论述了优化设计方法的发展背景、流程,并对无约束优化及约束优化不同优化设计方法的发展情况、原理、具体方法、特点及应用范围进行了叙述。

另外,选择合适的优化设计方法是解决某个具体优化设计问题的前提,而对优化设计方法进行分析、比较和评判是其关键,本文分析了优化方法的选取原则。

之后对并对近年来出现的随机方向法、遗传算法、蚁群算法和模拟退火算法等新兴优化方法分别进行了介绍。

本文以交通领域中建立最优交通网路为例说明了优化设计方法的应用特点。

关键词:机械优化设计;约束;特点;选取原则目录第一章引言 (1)1.1优化设计的背景 (1)1.2机械优化设计的特点 (2)1.3优化设计的模型 (3)1.4优化设计的流程 (4)第二章优化设计方法的分类 (6)2.1无约束优化设计方法 (7)2.1.1梯度法 (7)2.1.2牛顿型方法 (7)2.1.3共轭梯度法 (8)2.1.4变尺度法 (8)2.2约束优化设计方法 (9)2.2.1直接解法 (9)2.2.2间接解法 (11)2.3多目标优化方法 (13)2.3.1主要目标法 (14)2.3.2加权和法 (14)第三章各类优化设计方法的特点 (15)3.1无约束优化设计方法 (15)3.2约束优化设计方法 (16)3.3基因遗传算法(Genetic Algorithem,简称GA) (16)3.4模糊优化设计方案 (17)第四章优化方法的选择 (18)4.1优化设计方法的评判指标 (18)4.2优化方法的选取原则 (19)第五章机械优化设计发展趋势 (21)第六章 UG/PRO-E建模 (23)参考文献 (27)第一章引言1.1优化设计的背景在人类活动中,要办好一件事(指规划、设计等),都期望得到最满意、最好的结果或效果。

机械优化设计课程设计

机械优化设计课程设计

目录摘要 (3)关键词 (3)一、概述 (3)二、优化方法介绍 (3)(一)、一维搜索方法 (3)(二)无约束优化方法 (5)1)共轭方向的生成 (6)2)基本算法 (6)3)改进算法的基本步骤如下 (7)三、优化设计实例 (10)1)模型 (10)2)变量 (10)3)优化设计源程序 (10)4)分析结果 (20)四、课程总结 (20)《机械优化设计》课程设计论文摘要:随着社会经济的迅速发展,机械优化设计作为一门为工程设计提供手段的学科,在这样的时代背景下应运而生。

针对具体的课题,通过一些设计变量而建立起目标函数的过程,称为数学建模;应用优化方法为工程设计寻找出最优解是现代优化设计所研究的主要课题与方向。

关键词:机械优化设计;设计变量;目标函数;数学模型;优化方法一、概述优化设计是20世纪60年代初发展起来的一门新学科,它是将最优化原理与计算技术应用于设计领域,为工程设计提供一种重要的科学设计方法的手段。

利用这种新的设计方法,人们就可以从众多的设计方案中寻找出最佳设计方案,从而大大提高设计效率和设计质量。

因此优化设计是现代设计理论和方法的一个重要领域,它已广泛应用于各个工业部门,成为现代工程设计的一个重要手段!二、优化方法介绍(一)、一维搜索方法一维搜索方法可分为两类,一类称为试探法,这类方法是按某种给定的规律来确定区间内插入点的位置,此点位置的确定仅仅按照区间缩短如何加快,而不顾及函数值的分布关系,例如黄金分割法,裴波那契法等。

另一类一维搜索法称作插值法或函数逼近法。

这类方法是根据某些点处的某些信息,如函数值,一阶导数,二阶导数等,构造一个插值函数来逼近原来的函数,用插值函数的极小点作为区间的插入点,这类方法主要有二次插值法,三次插值法等。

在此重点讨论黄金分割法。

黄金分割法适用于[a, b]区间上的任何单谷函数求极小值问题,对函数除要求“单谷”外不作其他要求,甚至可以不连续。

因此,这种方法的适应面相当广。

机械优化设计

机械优化设计
8
2016/6/16
现代设计的基本方法
理论、方法和实现方法的工具
首先要有理论,然后研究方法,并开发工具来实现方法。
基本方法:
创新设计 仿真与虚拟现实 异地协同设计 超级并行计算 远程资源共享
产品设计的典型理论方法
通用设计理论(GDT)和泛设计理论(UDT) Pahl和Beitz的理论(P&B) 公理设计(Axiomatic Design;简称AD)理论 TRIZ理论 分布式资源设计理论 可靠性设计理论 优化设计理论
化、多样化的消费需求使 得市场快速多变,不可捉摸,无法预 测。 ——最大限度地满足用户的要求。 小批量、快速交货:客户化、小批量、多品种、快速交货的生产要 求不 断增加。各种新技术的涌现和应用更加剧了市场的快速变化。
市场的动态多变性:迫使制造企业改变策略,时间因素被提高到首 要地位。 ——产品生命周期缩短,交货期成为主要的竞争因 素。
什么是现代设计?
现代设计的主要特点
全生命周期的设计
考虑从产品诞生到报废全过程的每一个环节的问题的
设计。
产品的全生命周期
销售
维 修
回 收
概 念 设 计
用户 需求
7
2016/6/16
什么是现代设计?
现代设计的一般过程
详细设计 画图不等于设计,同样,计算也不等于设计
设计需要在广泛的范围中联想(灵感);它同时又是一个知识获取 的过程。二者都不可能仅仅按照某种程式运算或推理来获得解。图形和 图像是设计的结果,而不是它的出发点,设计的起点是对产品性能的需 求。图也不是设计的唯一结果,同时还要有一份设计说明书,描述图所 不能表达的内容。几何特征不是产品唯一特征。产品的性能特征是控制 整个设计过程的基本特征。

机械优化设计PPT课件

机械优化设计PPT课件
ⅱ)设计方案—由设计常量和设计变量组成。
ⅲ)维 数—设计变量的个数n.
通常,n ,设计自由度 , 越能获得理想的结果,但求解难度 .
n 10 小型问题 n 11 50 中型问题 n 50 大型问题
2019/8/16
14
2.设计空间
Rn(n 4) 为超越空间.
2019/8/16
15
三.目标函数和等值线
1.目标函数—数学模型中用来评价设计方案优劣的函
数式 (又称评价函数): f (X ) f (x1, x2,...xn ) ①常用指标: 最好的性能; 最小的重量; 最紧凑的外形;
最小的生产成本; 最大的经济效益等.
②单目标和多目标;
l1 l2 l3 l4 0
l1 l10 0
arccos (l2 l1)2 l42 l32 arccos (l2 l1)2 l42 l32 0
2(l2 l1)l4
2(l2 l1)l4
180
l12
l22
2l32 sin 2 ( l22 l12
2019/8/16
22
3.算法的收敛性和收敛准则
1)算法的收敛性
若由某迭代算法计算得到
有极限 lim X (k) X *,这里X *为精确解,则称该迭代算法是 k
收敛的.
2)算法的收敛速度
一般根据算法对正定二次函数的求解能力来判 断,能在有限步迭代中得到其极小点,称算法具有 二次收敛性。具有二次收敛性的算法是收敛速度较 高的方法。
1)二十世纪三十年代.前苏联 Канторович 根据生产组织和计划管理的需要提出线性规划问题. 在 第二次世界大战期间出于战争运输需要,提出线性规划 问题的解法;

机械优化设计教案

吉林大学教师教案(20 07 ~2008 学年第二学期)课程名称:机械优化设计年级:20XX级01-09班教研室:机械设计及自动化任课教师:李风吉林大学教务处制教案等值线—等高线●等值线●等高线:●它是由许多具有相同目标函数值的设计点所构成的平面曲线。

课后小结1:人字架的优化数学模型2:数学模型的基本构成第二节机械优化问题示例第三节优化设计问题的数学模型2学时五、优化问题的几何解释●无约束优化问题就是在没有限制的条件下,对设计变量求目标函数的极小点。

在设计空间内,目标函数是以等值面的形式反映出来的,则无约束优化问题的极小点即为等值面的中心。

●约束优化问题是在可行域内对设计变量求目标函数的极小点,此极小点在可行域内或在可行域边界上。

课后小结1.机械优化设计数学模型的一般形式2:优化设计的数学基础,梯度的概念第四节优化设计问题的基本解法●求解优化问题:解析解法●数值的近似解法。

2学时●解析解法:把所研究的对象用数学方程(数学模型)描述出来,然后再用数学解析方法(如微分、变分方法等)求出优化解。

●数值解法:只能通过大量试验数据用插值或拟合方法构造一个近似函数式,再来求其优化解,这种方法是属于近似的、迭代性质的数值解法。

不仅可用于求复杂函数的优化解,也可以用于处理没有数学解析表达式的优化设计问题。

因此,它是实际问题中常用的方法。

●可以按照对函数导数计算的要求,把数值方法分为需要计算函数的二阶导数、一阶导数和零阶导数(即只要计算函数值而不须计算其导数)的方法。

●由于数值迭代是逐步逼近最优点而获得近似解的,所以要考虑优化问题解的收敛性及迭代过程的终止条。

收敛性是指某种迭代程序产生的序列收敛于第二章优化设计的数学基础第一节多元函数的方向导数与梯度二、二元函数的梯度考虑到二元函数具有鲜明的几何解释,并且可以象征性地把这种解释推广到多元函数中去,所以梯度概念的引入也先从二元函数人手。

等值线—等高线●等值线●等高线:●它是由许多具有相同目标函数值的设计点所构成的平面曲线。

机械优化设计-黄金分割法

xlabel('x') ylabel('f')
总结:
• 一维搜索第一步:找初始单谷区间; 1.进退法
第二步:使区间缩小。 2.黄金分割法
二、一维搜索方法分类
根据插入点位置的确定方法,可以把一维搜索法 分成两大类: ⑴试探法:即按照某种规律来确定区间内插入点 的位置,如黄金分割法,斐波那契法等。
斐波那契数列:1、1、2、3、5、8、13、21 、34、55、89、144...... ⑵插值法(函数逼近法):通过构造插值函数来 逼近原函数,用插值函数的极小点作为区间的插 入点,如二次插值法,三次插值法等。
y1=subs(f,a1); y2=subs(f,a2); if y1>y2 a=a1; a1=a2; y1=y2; a2=a+0.618*(b-a); disp(['判定: f1>=f2']); else b=a2; a2=a1; y2=y1; a1=a+0.382*(b-a); disp(['判定: f1<f2']); end
b=input('输入初始单谷区间右端点='); e=input('搜索精度(数值越小所求极小值精度越高) e='); k=0; format long; a1=a+0.382*(b-a); a2=a+0.618*(b-a); fprintf('第0次缩短区间\n'); fprintf('a1='); disp(a1); fprintf('a2='); disp(a2); while b-a>e
k=k+1; disp(['第',num2str(k),'次缩短区间']); fprintf('a1='); disp(a1); fprintf('a2='); disp(a2); end format long; xmin=(a+b)/2; fmin=subs(f,xmin); fprintf('迭代次数k='); disp(k); disp('极小值为'); disp('fmin ='); disp(fmin); fprintf('极小点为'); t=a:e/100:b; T=subs(f,t); plot(t,T);

优化设计

浅述机械优化设计[摘要] 在科技迅速发展的今天,机械制造在当今社会有着越来越重要的地位。

而机械优化设计是以最低的成本获得最好的效益,是设计工作者一直追求的目标,从数学的观点看,工程中的优化问题,就是求解极大值或极小值问题,亦即极值问题。

现代机械设计对产品的设计已经不再仅仅考虑产品本身,而且还要考虑对系统和环境的影响;不仅要考虑技术领域,还要考虑经济、社会效益;不仅要考虑当前,还要考虑长远的发展。

这使得机械优化设计对于提高企业产品竞争力,具有非常重要的意义。

关键词:机械优化设计极值问题企业产品竞争力1 机械优化设计的发展概况在二次世界大战期间,由于军事上的需要产生了运筹学,提供了许多用古典微分法和变分法所不能解决的最优化方法。

20世纪50年代发展起来的数学规划理论形成了应用数学的一个分支,为优化设计奠定了理论基础。

20世纪60年代电子计算机和计算机技术的发展为优化设计提供了强有力的手段,使工程技术人员把主要精力转到优化方案的选择上。

最优化技术成功地运用于机械设计还是在20世纪60年代后期开始。

在机构综合,机械零部件的设计,专用机械设计和工艺设计方面获得了应用并取得了一定的成果。

但是还面临着许多问题要解决例如机械产品设计中零部件的通用化系列化和标准化,整机优化设计模型及方法的研究,机械优化设计中离散变量优化方法的研究,更为有效的优化设计方法的发掘等一系列问题。

近年来发展起来的计算机辅助设计(CAD),在引入优化设计方法后,使得在设计工程中既能够不断选择设计参数并评选出最优设计方案,又可加快设计速度,缩短设计周期。

在科学技术发展要求机械产品更新的今天,把优化设计方法与计算机辅助设计结合起来,使设计工程完全自动化,已成为设计方法的一个重要发展趋势。

2 机械优化设计的基本理论优化设计是建立在数学规划理论和计算机程序设计基础上,通过计算机的数值计算,能从众多的设计方案中寻到尽可能完善的或最适宜的设计方案,使期望的经济指标达到最优,它可以成功地解决解析等其它方法难以解决的复杂问题,优化设计为工程设计提供了一种重要的科学设计方法,因而采用这种设计方法能大大提高设计效率和设计质量。

机械优化设计方法综述

有 不 同 的 优 化 方 法 。 的 优 化 方法 有 效果 较 好 , 的 则较 差 , 至 会导 致 错 误 的 有 甚 结 果 。 此 , 据 优化 设 计 问 题 的特 点 ( 因 根 如
约 束条 件 ) 选 取 适 当 的优 化 方 法 是 非 常 关 , 键 的 。 下 列举 了4 选 择优 化 方 法 的 基本 以 个
设 计 指标 , 机 械 设计 而 言 , 般 是指 重 量 就 一 直 接 法 常 用 的 方 法 有 复 合 形 法 、 束 原 则 : 约 轻、 能耗 小 、 刚性 大 、 本 低等 ; 谓 限制 条 坐 标 轮 换法 、 成 所 网络 法 等 。 内 涵 是 构造 一 个 其 ( ) 率 要 高 。 谓 效 率 要 高 就 是 所 采 1效 所 件 , 指 强度 要 求 、 度 要 求 、 寸 范 围 要 迭 代 过 程 , 是 刚 尺 使每 次 的 迭 代 点都 在 可 行域 中 , 用 的优 化 算 法 所 用 的计 算 时 间或 计 算 函数 求等 。 同时 逐 步 降 低 目标 函数 值 , 到 求 得 最 优 的次 数 要 尽 可 能 地 少 。 直
优 化 设 计 是 在 给 定 的 设 计 指 标 和 限 制 间 接 法 常 见 的 方 法 有 增 广 拉 式 乘 子 条件 下 , 运用 最 优 化 原理 和方 法 , 电子 计 法 、 函 数 法 。 是 将 有约 束 优 化 问题 转化 在 罚 它 算 机 上 进 行 自动 调 优 计 算 , 而 选定 出 最 为 无约 束 优 化 问 题 , 通 过 无 约 束 优 化 方 从 再 优 设 计 参数 , 设 计 指标 达到 最 优 值 。 最 法 来 求 解 。 者 将 非 线 性 约 束 优 化 问题 转 使 该 或 优 设 计 参 数 就 是 一 个 最 优 设 计 方 案 。 谓 化 为 线 性 规 划 问题 来 处理 。 所
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机械优化设计程序 (2009-04-24 19:30:52)

转载 标签: 机械优化设计 程序 powell 外点惩罚函数法 c 杂谈

今天终于交了机械优化设计作业,程序贴出来,那位要用就拿去吧,资源共享了,O(∩_∩)O 下面是利用外点惩罚函数(Powell)法求解三维目标函数最优解与最优值的程序,用C++编写。

#include #include double lamta[10]={0, 1.0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,1};//鲍威尔方法初始化方向,线性无关 double lamta1[3]={0, 0 , 0};//暂存新的搜索方向 double x1[4]={0, 0 ,0, 0 };//x1到x3用于存储各共轭方向的点 double x2[4]={0, 0 ,0, 0 }; double x3[4]={0, 0 ,0, 0 }; double x4[4]={0, 0 ,0, 0 };//x4用于中间判断 double x5[4]={0, 0 ,0, 0 };//x5用存放于更换方向后产生的新点 int m=0;//标志 double x_[4]={0, 0, 0, 0};//暂存鲍威尔最优解 double x0[4]={0, 2, 2 , 2};//初值 double c=10;//递减系数 double e=0.00001;//精度控制 double r0=1;//初始惩罚因子 double r=1; //函数声明部分 void Powell(double r); //鲍威尔方法函数 double fxy(double x1,double x2,double x3,double r); //待求函数 double ysearch(double x); //一维搜索的目标函数 void search(double &a,double &b,double h); //区间搜索 double yellowcut(double &a,double &b); //黄金分割 void sort(double *p,int size);//选择法排序 void main() //约束优化方法主函数入口 { cout<<"请输入精度"< cin>>e; changyan:Powell(r); double cmpare[4]; int flag1=0; for (int i=1;i<=3;i++) { cmpare[i]=x_[i]-x0[i]; if (fabs(cmpare[i]) {flag1++;} } if (flag1==3) { cout<<"最优解为:"<<"x1="< } else { for (int j=1;j<=3;j++) { x0[j]=x_[j]; } r=c*r; goto changyan; } } //子函数定义部分 double fxy(double x1,double x2,double x3,double r)//待求函数 { double m,n,p; m=(-x1>0)?(-x1):0; n=(-x2>0)?(-x2):0; p=(-x3>0)?(-x3):0; return //惩罚函数 1000-x1*x1-2*x2*x2-x3*x3-x1*x2-x1*x3+r*(m*m+n*n+p*p)+r*((x1*x1+x2*x2+x3*x3-25)*(x1*x1+x2*x2+x3*x3-25)+(8*x1+14*x2+7*x3-56)*(8*x1+14*x2+7*x3-56)); } void Powell(double r) //鲍威尔方法函数定义 { double det=0.0001; //迭代精度 int k; my1: for (k=1;k<=3;k++) { m=3*k-2; double a=0,b=0,xo=0; search(a,b,1); //完成区间搜索 double temp; temp=yellowcut(a,b);//黄金分割法 int n=3*k-2; for (int i=1;i<=3;i++) { switch (k) { case 1:x1[i]=x0[i]+temp*lamta[n++];break; case 2:x2[i]=x1[i]+temp*lamta[n++];break; case 3:x3[i]=x2[i]+temp*lamta[n++];break; default :break; } } } double cmp[4]; int flag=0; for (int i=1;i<=3;i++) { cmp[i]=x3[i]-x0[i]; if (fabs(cmp[i]) {flag++;}} if (flag==3) //找到最优解 { x_[1]=x3[1]; x_[2]=x3[2]; x_[3]=x3[3];

} else { double fy[4]; fy[0]=fxy(x0[1],x0[2],x0[3],r); fy[1]=fxy(x1[1],x1[2],x1[3],r); fy[2]=fxy(x2[1],x2[2],x2[3],r); fy[3]=fxy(x3[1],x3[2],x3[3],r); double fyy[3]; for (int ii=0;ii<3;ii++) {fyy[ii]=fy[ii]-fy[ii+1];} sort(fyy,3); for (ii=1;ii<=3;ii++) {x4[ii]=2*x3[ii]-x0[ii];} double f0,f3,f4; f0=fy[0]; f3=fy[3]; f4=fxy(x4[1],x4[2],x4[3],r); if ((f0+f4-2*f3)/2>=fyy[2]) { if (f3 { for (int t=1;t<=3;t++) {x0[t]=x3[t];} } else { for (int t=1;t<=3;t++) {x0[t]=x4[t]; }} goto my1; } else{ for (int t=0;t<3;t++) {lamta1[t]=x3[t+1]-x0[t+1];} m=0; //switch 标志! double aa=0,bb=0; search(aa,bb,1); double temp1; temp1=yellowcut(aa,bb); for (int i=1;i<=3;i++) {x5[i]=x3[i]+temp1*lamta1[i-1];} for (i=1;i<=3;i++) {x0[i]=x5[i];} for (i=1;i<=6;i++) {lamta[i]=lamta[i+3];} for (i=1;i<=3;i++) { lamta[6+i]=lamta1[i-1];} goto my1; }}}

double ysearch(double x) //一维搜索的目标函数 { switch (m) { case 1: return fxy(x0[1]+x*lamta[m],x0[2]+x*lamta[m+1],x0[3]+x*lamta[m+2],r);break; case 4: return fxy(x1[1]+x*lamta[m],x1[2]+x*lamta[m+1],x1[3]+x*lamta[m+2],r);break; case 7: return fxy(x2[1]+x*lamta[m],x2[2]+x*lamta[m+1],x2[3]+x*lamta[m+2],r);break; case 0: return fxy(x3[1]+x*lamta1[0],x3[2]+x*lamta1[1],x3[3]+x*lamta1[2],r);break;//更改方向后的一维搜索 default:return 0; break; } } void search(double &a,double &b,double h) //区间搜索 {double a1,a2,a3,y1,y2,y3; h=1; a1=a,y1=ysearch(a1); a2=a+h,y2=ysearch(a2); if(y2>=y1){ h=-h,a3=a1,y3=y1; a1=a2,y1=y2,a2=a3,y2=y3;} a3=a2+h,y3=ysearch(a3); while(y3<=y2){ h=2*h; a1=a2,y1=y2,a2=a3,y2=y3; a3=a2+h,y3=ysearch(a3); } if(h<0)a=a3,b=a1; else a=a1,b=a3;} double yellowcut(double &a,double &b){ double e; //黄金分割法求解 e=0.001; double c,fc; c=a+0.382*(b-a); fc=ysearch(c); double d,fd;

相关文档
最新文档