数学建模社区-数学中国
标题:
复合形法求解约束最优化Fortran代码
[打印本页]
作者:
建不了的模。
时间:
2015-1-12 11:16
标题:
复合形法求解约束最优化Fortran代码
!* 说明: 1.本程序为复合形法 *
) z4 K/ h8 a9 ^
!* *
5 I" x6 B: P* ?
!* 2.程序功能是求解约束最优化问题 *
9 q1 U+ A @1 Z8 Q) h) k3 ?4 U5 ?; v
!* max F(x1,x2,…,xn) *
# p0 d7 ?/ O( [/ I
!* s.t. Gi≤xi≤Hi *
8 `( h. O0 j8 j+ k
!* 其中 x1,x2,…,xn为独立自变量, *
) P- J% Z+ z$ S2 k, r* S
!* xn+1~xm为隐式变量,是x1,x2,…,xn的函数,Gi,Hi为下界和上界,它们可以是常数(显式约束),*
, h2 `& n* G3 F! m* O
!* 也可以是自变量的函数(隐式约束) *
# q# V y# O* g# E1 @8 W2 ^
!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果 *
4 I5 w8 R7 N! e, {! H
!* *
+ h/ k0 L" O& f7 [1 c. O; e8 a- |
!* 3.输入变量说明 *
4 A0 i4 n: m% s! ^0 ^
!* N--显式自变量数 *
" u4 Z: s/ }% S2 t8 E
!* M--约束组数 *
& v; m; ~$ n4 b* a) N6 z
!* K--构成复合形的顶点数,常用N+1,可多取 *
0 |8 O$ G6 [- t1 d/ V, g! \: [
!* ITMAX--允许最多迭代次数 *
# [+ e/ e; _+ f: O( H1 i, U G4 x
!* IPRINT--打印控制参数,IPRINT=1,打印中间结果,IPRINT=0,不打印中间结果 *
) p5 p- L. c* ]6 {8 y, L' J4 }
!* ALPHA--反射因子,常用1.3 *
n( W8 j+ B4 x M d
!* BETA--收敛参数,例如函数的幅值乘1E-4 *
! h, z( O+ I( r/ W
!* GAMMA--收敛参数,整数,常用值为5 *
; |( p$ u- d7 p; W
!* DELTA--显式约束违反校正,小正数,如X向量幅值乘1E-4 *
5 X$ L/ k( b3 E+ v) i* C
!* X(1,J)--自变量初始可行点,=1,N *
( V0 e; O- q- H7 q+ `- ]
!* *
0 v: a" K; L' R
!* 4.输出变量说明 *
$ J# G& f! Z0 ^( [* K8 o
!* F--目标函数最大值勤 *
7 T& `% R: z) [6 v3 U
!* X(I)--自变量最优值,I=1,N *
9 e3 X1 F6 r o/ {% W$ G+ Q
!* *
: q m4 u- Q& I0 q8 |. a
!* 5.使用方法 *
! L, n/ n9 T3 \5 }
!* 1)用户按照待解问题修改主程序PARAMETER的N,M,K值 *
3 {. |6 c9 ^4 q9 @3 D: k" N
!* 2)在子程序FUNC中给定目标函数 *
D C- a+ ]$ Z% F) O1 R: z
!* 3)在子程序CONST中给定Hi和Gi,显式约束必须放在隐式约束前面 *
6 ^0 c; I5 V5 j% K8 q/ `+ W. `
!* 4)编写一个数据文件COMPDAT,文件中的数据依次为下列变量的值,每个数之间用逗号分开 *
9 W- l7 g! f7 l3 ?) a/ f
!* ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTA,X(1,1),X(1,2),…,X(1,N) *
" D) v: |/ ]1 ~! o+ J
!* 6.程序内容 *
+ X! _$ Q5 O" r1 A$ C( [0 z
!* 1)本程序由一个主程序和六个子程序组成,主程序首先给定N,M,K值,然后定义数组维数 *
2 S5 b1 r- \% o: A1 K6 k9 h
!* PARAMETER(N=,M=,K=) *
3 X6 I5 m" @* ]7 k1 [
!* DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N) *
8 E7 V2 A) B2 n4 h- x
!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果面 *
/ d! r1 I# P! @" a7 _ d# j
!* 2)各子程序的作用分别为了 *
, P, t: H0 {3 i6 v3 c
!* CONSX—这是一个主要子程序,调用其它于程序及输出中间结果 *
" g) D8 O" U$ s
!* CHECK—检查所有的点是否满足约束条件,对违背约束的点进行校正 *
3 C3 d, Q/ E# e3 K9 I) U
!* CENTR—计算中心点 *
& j* A2 z' A5 N' \
!* FUNC —目标函数,由用户提供 *
0 Q6 r7 [( C5 Y& |8 G$ Q' ~8 l, m
!* CONST—规定显式和隐式约束 *
; l# x$ S$ S8 \% z/ z4 Z
!* RANDU—产生随机数 *
' f3 y- s( M2 c- k! Q0 B, x8 C
!*************************************************************************************************
2 H( S( O3 T O
6 \4 _( U! J- K& ^9 i$ t1 g
' F6 G- H2 a9 T: i
* o; P% u7 C7 ]3 g: T
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5