数学建模社区-数学中国

标题: 复合形法求解约束最优化Fortran代码 [打印本页]

作者: 建不了的模。    时间: 2015-1-12 11:16
标题: 复合形法求解约束最优化Fortran代码
!* 说明: 1.本程序为复合形法                                                                          *' A$ b- R" ?3 A0 @! x& \
!*                                                                                                        *
5 h% e& a6 [" A; J8 w( k+ l!*       2.程序功能是求解约束最优化问题                                                              *& i# Z0 n, Z8 _& j5 M' p; z; F
!*   max F(x1,x2,…,xn)                                                               *
6 F) h6 }& f, z+ w7 G!*        s.t.        Gi≤xi≤Hi                                                              *& R1 M9 y, W% n( l- M
!*      其中 x1,x2,…,xn为独立自变量,                                                              *
$ |" m& j: X" B!*       xn+1~xm为隐式变量,是x1,x2,…,xn的函数,Gi,Hi为下界和上界,它们可以是常数(显式约束),*
$ M3 q/ D5 q4 i$ H# a4 W2 B!*  也可以是自变量的函数(隐式约束)                                                            *
" H" O+ x( ?' C& C3 Y; x/ e/ |!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果                                            *
3 Y8 M! ~4 A( Z% Q: a!*                                                                                                        *
- |  P  b$ O3 M: }. l!*       3.输入变量说明                                                                              *
7 X1 O6 N2 ^( k7 \/ f!*  N--显式自变量数                                                                           *+ j% K2 p+ Y) x* i! ?) ?0 S: A. `( I
!*  M--约束组数                                                                               *, L1 S: g; g4 _* b% ~
!*  K--构成复合形的顶点数,常用N+1,可多取                                                      *9 O/ S1 {1 b3 a: c6 w. F3 o
!*  ITMAX--允许最多迭代次数                                                                   *
9 X5 o8 J' H' `& d; r4 [: Y!*  IPRINT--打印控制参数,IPRINT=1,打印中间结果,IPRINT=0,不打印中间结果                        *
$ y4 N; X! l# N!*  ALPHA--反射因子,常用1.3                                                                   *
) o- V" t6 ~4 G4 y!*  BETA--收敛参数,例如函数的幅值乘1E-4                                                       *7 E) \1 a- \% t+ t3 O" p
!*  GAMMA--收敛参数,整数,常用值为5                                                            */ }2 x* o( M8 a
!*  DELTA--显式约束违反校正,小正数,如X向量幅值乘1E-4                                          *0 [, v  L) v( E3 [  ^* ]1 i( m
!*  X(1,J)--自变量初始可行点,=1,N                                                             *; a! s' J) l5 W0 Z5 {' v' \
!*                                                                                                      ** b! n9 L5 N) r/ U( {
!*      4.输出变量说明                                                                               *  K- ~3 Z) z. ]. \2 q) A: O, Z
!*  F--目标函数最大值勤                                                                       *4 V0 O4 a' Z; w0 z/ }& a
!*  X(I)--自变量最优值,I=1,N                                                                  *4 |  z# \% w, }/ i9 l8 G
!*                                                                                                      *
2 E" b4 O8 \6 B9 e!*      5.使用方法                                                                                   *
6 x, j1 ?/ ~9 B# }" V1 M!*  1)用户按照待解问题修改主程序PARAMETER的N,M,K值                                            *  k6 i( d4 ?( K* n% S0 C( R
!*  2)在子程序FUNC中给定目标函数                                                              *  G4 g8 ^2 l9 `0 A
!*  3)在子程序CONST中给定Hi和Gi,显式约束必须放在隐式约束前面                                  *
2 V  R9 t0 K0 ?2 @, E!*  4)编写一个数据文件COMPDAT,文件中的数据依次为下列变量的值,每个数之间用逗号分开             *   
0 e( W- E  Y" R1 j2 S' H!*      ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTA,X(1,1),X(1,2),…,X(1,N)                          *
; ?7 U& }5 g/ b; E* s( H6 g!*      6.程序内容                                                                                   *
* O/ f! j/ i8 h8 L!*  1)本程序由一个主程序和六个子程序组成,主程序首先给定N,M,K值,然后定义数组维数             *
) y) y. H" M" C3 F!*   PARAMETER(N=,M=,K=)                                                               *3 P9 A  e( C( |8 C7 g* `& |8 {
!*   DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N)                                      *2 L4 @% D, ]. H$ R+ f7 f
!*  主程序中提供自变量的初始值,输入已知参数及打印最后结果面                                  *+ h# d3 j' |' g( Q7 ]% x$ j! f
!*  2)各子程序的作用分别为了                                                                  *   
2 l0 J% N/ g3 X2 n!*      CONSX—这是一个主要子程序,调用其它于程序及输出中间结果                               *: K5 w( b! @$ l" I" Z8 _) |: e/ i0 A
!*      CHECK—检查所有的点是否满足约束条件,对违背约束的点进行校正                            *% N2 w$ Y0 G3 A0 h$ [* @. ~& \7 w
!*      CENTR—计算中心点                                                                     *
( j+ y! N( Q+ l+ H!*      FUNC —目标函数,由用户提供                                                           *
; f) w9 u6 X( L!*      CONST—规定显式和隐式约束                                                             *: d/ \# U4 A/ l# z+ E0 G
!*      RANDU—产生随机数                                                                     *+ Y  V% e: z  N, B2 _: T' \6 R2 |
!*************************************************************************************************5 B& B6 I/ J7 b2 U1 U& a$ u: _

) W. }/ l: p/ M2 z% `5 x- ^6 P2 p3 ^2 B* M! I* w  U
- c9 Y( }1 v1 w7 U* S+ K





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5