数学建模社区-数学中国

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

作者: 建不了的模。    时间: 2015-1-12 11:16
标题: 复合形法求解约束最优化Fortran代码
!* 说明: 1.本程序为复合形法                                                                          *
4 @6 Q) K: O* Q  _- l( D' g!*                                                                                                        *
4 N+ h6 R/ r) M; R!*       2.程序功能是求解约束最优化问题                                                              *) T- V6 v4 z& N% ?6 z
!*   max F(x1,x2,…,xn)                                                               ** J% I) Y, o6 ^9 A
!*        s.t.        Gi≤xi≤Hi                                                              *
: J; ]* U/ O6 z9 W! \3 R!*      其中 x1,x2,…,xn为独立自变量,                                                              *. w! x0 J0 ~  p! l8 y
!*       xn+1~xm为隐式变量,是x1,x2,…,xn的函数,Gi,Hi为下界和上界,它们可以是常数(显式约束),*
+ Q( J- v% v- Z* b) v!*  也可以是自变量的函数(隐式约束)                                                            *
2 e2 d7 ], u. C- {0 Y!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果                                            *
5 L: p5 y' i6 u6 C9 M2 V* T!*                                                                                                        *) @( _7 m# K8 x/ _7 y8 Z( U- B( d9 x
!*       3.输入变量说明                                                                              *
" G( D% M  U4 N# k9 K( l6 p!*  N--显式自变量数                                                                           *+ m- T! m4 M/ X9 \  m3 Z9 u4 t- I. j
!*  M--约束组数                                                                               *: @5 G! S+ l! A* j
!*  K--构成复合形的顶点数,常用N+1,可多取                                                      *
# D1 ?8 R( I  H3 T9 M0 Y# B4 g!*  ITMAX--允许最多迭代次数                                                                   *
7 f, i& q8 Y) a+ {!*  IPRINT--打印控制参数,IPRINT=1,打印中间结果,IPRINT=0,不打印中间结果                        *) x- U( Y2 \, f0 k
!*  ALPHA--反射因子,常用1.3                                                                   *( W$ E# e2 A, u
!*  BETA--收敛参数,例如函数的幅值乘1E-4                                                       *- N& b" B' v) T% E  I
!*  GAMMA--收敛参数,整数,常用值为5                                                            *
8 G" z0 `5 f$ u7 d0 z2 K!*  DELTA--显式约束违反校正,小正数,如X向量幅值乘1E-4                                          *
0 F2 l" a6 g' e!*  X(1,J)--自变量初始可行点,=1,N                                                             *
7 N( G7 V1 w! K  {; R( e!*                                                                                                      ** u. S/ A% I3 I2 W+ r) h* B
!*      4.输出变量说明                                                                               *
2 J0 ~2 s1 o* o# f6 i5 s!*  F--目标函数最大值勤                                                                       *) Y0 y7 i0 c# W# S
!*  X(I)--自变量最优值,I=1,N                                                                  ** O$ H( H1 j# [+ j; D
!*                                                                                                      *
$ [; l3 E9 T9 z* z7 h3 d6 `- P; z2 n!*      5.使用方法                                                                                   ** K; I- @7 q. _3 w3 b- m: r& d' B
!*  1)用户按照待解问题修改主程序PARAMETER的N,M,K值                                            *# N, o+ J& Z8 E5 h3 J
!*  2)在子程序FUNC中给定目标函数                                                              *- v. _8 s. O& m1 b  _9 L
!*  3)在子程序CONST中给定Hi和Gi,显式约束必须放在隐式约束前面                                  *
6 Y; x; I# R2 M' N" s. F2 k  r!*  4)编写一个数据文件COMPDAT,文件中的数据依次为下列变量的值,每个数之间用逗号分开             *   ; ~1 [7 u1 d& Z
!*      ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTA,X(1,1),X(1,2),…,X(1,N)                          *
, ^  ?4 _9 ~) o1 c9 q% q) j7 L!*      6.程序内容                                                                                   *+ u4 Z) S3 I" Q% G5 d' W
!*  1)本程序由一个主程序和六个子程序组成,主程序首先给定N,M,K值,然后定义数组维数             *
2 H: X8 H1 R% c# H$ H!*   PARAMETER(N=,M=,K=)                                                               *
5 N0 ]; B) p3 Q4 Q  S!*   DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N)                                      *5 h) S4 N% i9 T- ]* ^- J
!*  主程序中提供自变量的初始值,输入已知参数及打印最后结果面                                  *
5 W  T4 ~+ j& ]3 r6 d!*  2)各子程序的作用分别为了                                                                  *   , K  m' y7 ~/ }* Q' _6 \1 h/ P
!*      CONSX—这是一个主要子程序,调用其它于程序及输出中间结果                               *2 ~4 U+ c4 {) Y
!*      CHECK—检查所有的点是否满足约束条件,对违背约束的点进行校正                            *7 V# A" ]( f3 D* D
!*      CENTR—计算中心点                                                                     *
. q8 \. e3 [9 ^9 j# q+ z0 S4 r& |) Y!*      FUNC —目标函数,由用户提供                                                           *
! I1 E& L. R# ]+ a; X!*      CONST—规定显式和隐式约束                                                             *; @9 F" b8 p2 N+ L+ ^' x+ R
!*      RANDU—产生随机数                                                                     *
6 B5 v% v3 u, N0 V6 U!*************************************************************************************************( c: N6 q  x# O9 t5 T" w
- u, z" [& J7 g5 K

  R1 r, c' v$ H, p0 W; u) D, Z, I% Y0 l





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