数学建模社区-数学中国

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

作者: 建不了的模。    时间: 2015-1-12 11:16
标题: 复合形法求解约束最优化Fortran代码
!* 说明: 1.本程序为复合形法                                                                          *
" B# V- H* Q  ?# X1 @!*                                                                                                        *2 f$ R/ E5 k9 a# p) j2 n
!*       2.程序功能是求解约束最优化问题                                                              *! ?% f3 a  |# Q) Y% l% @$ x
!*   max F(x1,x2,…,xn)                                                               *0 |6 v: b& u, T* i& _6 T3 K# E
!*        s.t.        Gi≤xi≤Hi                                                              *
7 l6 l, y; N3 h!*      其中 x1,x2,…,xn为独立自变量,                                                              *# ?; ]9 M) @# {0 r/ d& x1 t
!*       xn+1~xm为隐式变量,是x1,x2,…,xn的函数,Gi,Hi为下界和上界,它们可以是常数(显式约束),*+ W: f8 d9 b0 O) ]
!*  也可以是自变量的函数(隐式约束)                                                            *
' z7 Y; ~+ D5 n1 I# S& t- }) ~8 h!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果                                            *, S. W& h; k* V0 W+ I7 l
!*                                                                                                        *$ A; P, o& R3 B' i
!*       3.输入变量说明                                                                              *' w" R9 _9 G7 k- c5 p1 y0 T. S
!*  N--显式自变量数                                                                           *
: N3 d" O3 d& g9 r+ i!*  M--约束组数                                                                               *0 O) I1 `8 ]# S3 ]. Z& ^
!*  K--构成复合形的顶点数,常用N+1,可多取                                                      *
- k4 g$ U2 Q4 q0 c& y  a!*  ITMAX--允许最多迭代次数                                                                   *# D/ ]' v6 x8 [3 _+ R) d
!*  IPRINT--打印控制参数,IPRINT=1,打印中间结果,IPRINT=0,不打印中间结果                        *
8 D$ N) I! |, Y! y% q: L!*  ALPHA--反射因子,常用1.3                                                                   *
; z* _/ x; b& [. X7 }% L$ H5 p5 l8 V!*  BETA--收敛参数,例如函数的幅值乘1E-4                                                       *2 D% y4 z9 y0 L6 g0 S( H
!*  GAMMA--收敛参数,整数,常用值为5                                                            *. K) \$ E, s. T3 l5 v# P0 [
!*  DELTA--显式约束违反校正,小正数,如X向量幅值乘1E-4                                          *
' N5 B' q8 c- Z& p!*  X(1,J)--自变量初始可行点,=1,N                                                             *) y8 K! J) s9 c
!*                                                                                                      *
# W% S1 N1 t* R9 q6 ^7 {" z!*      4.输出变量说明                                                                               *
) o4 e( z, b% p. t+ d: R, h!*  F--目标函数最大值勤                                                                       *, l9 a+ Y* _8 ]
!*  X(I)--自变量最优值,I=1,N                                                                  *4 W7 W, w: _' I3 H/ z! D+ G' {6 A
!*                                                                                                      *
; a8 m( L1 A6 x& ]; x6 A, e!*      5.使用方法                                                                                   *6 H" B% u1 Q( y- |7 ~
!*  1)用户按照待解问题修改主程序PARAMETER的N,M,K值                                            *
* ~* ^/ Z! H6 l4 H4 X0 W* ^$ w!*  2)在子程序FUNC中给定目标函数                                                              *
! w9 ?3 p% y3 m9 V: I' @!*  3)在子程序CONST中给定Hi和Gi,显式约束必须放在隐式约束前面                                  *1 m. K" ^* o/ \9 X1 K  P
!*  4)编写一个数据文件COMPDAT,文件中的数据依次为下列变量的值,每个数之间用逗号分开             *   
8 A2 ]/ Z9 Y. a+ L; I!*      ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTA,X(1,1),X(1,2),…,X(1,N)                          *9 \8 _. W1 P; V0 H! H
!*      6.程序内容                                                                                   *
( h% A% N" h1 O* q& J!*  1)本程序由一个主程序和六个子程序组成,主程序首先给定N,M,K值,然后定义数组维数             *
7 J! h: Q; b; Z- Z9 K& }!*   PARAMETER(N=,M=,K=)                                                               *: a/ I) O- c. @: n1 X- C" @! Q: |
!*   DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N)                                      *& s" @: E7 y6 n: M
!*  主程序中提供自变量的初始值,输入已知参数及打印最后结果面                                  *. V3 j  o2 H  H0 p. h( i
!*  2)各子程序的作用分别为了                                                                  *   
. \$ o( L) h" U* {! _!*      CONSX—这是一个主要子程序,调用其它于程序及输出中间结果                               *% Y, E! t7 z- I
!*      CHECK—检查所有的点是否满足约束条件,对违背约束的点进行校正                            *( o4 x5 v9 w% i
!*      CENTR—计算中心点                                                                     *
, @0 P4 v  \$ I  J- ^!*      FUNC —目标函数,由用户提供                                                           *
. E" [, N' i# T; w!*      CONST—规定显式和隐式约束                                                             *
2 U0 C  N* e, e" D4 Y4 A6 R!*      RANDU—产生随机数                                                                     *
, _0 s# d1 g: _!*************************************************************************************************
% _3 a" Y; S: f( l
9 ~- Q9 B0 d; `8 j: ]+ N9 g
* C3 d6 d8 J" ~* z1 w& x/ V
5 l: s8 c7 R$ m7 @' z3 N( M




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