数学建模社区-数学中国

标题: 复合形法求解约束最优化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