数学建模社区-数学中国

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

作者: 建不了的模。    时间: 2015-1-12 11:16
标题: 复合形法求解约束最优化Fortran代码
!* 说明: 1.本程序为复合形法                                                                          *
0 p8 B$ z* D6 |& w. A8 Q!*                                                                                                        *
6 |7 e+ {# I' A7 }( l!*       2.程序功能是求解约束最优化问题                                                              *
/ h, _+ q5 Z  `!*   max F(x1,x2,…,xn)                                                               *1 N1 g% v5 E. [1 w( Y; ~7 n- l
!*        s.t.        Gi≤xi≤Hi                                                              *
9 Y' k1 F2 T6 f% w" r' m0 n!*      其中 x1,x2,…,xn为独立自变量,                                                              *
3 H$ E/ U2 q" l!*       xn+1~xm为隐式变量,是x1,x2,…,xn的函数,Gi,Hi为下界和上界,它们可以是常数(显式约束),*
: D6 f+ Q- F6 `# {6 f!*  也可以是自变量的函数(隐式约束)                                                            *
1 N% Z" X+ y( U1 [. S5 `!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果                                            *
# p5 K7 W0 i, G!*                                                                                                        *- n( O- l" A, E, ?" I5 E6 u: i* d
!*       3.输入变量说明                                                                              *# Y9 J, p0 Q0 L
!*  N--显式自变量数                                                                           *
" @/ o3 w7 B2 }9 G! f. F* q!*  M--约束组数                                                                               *2 W) c* r, n" U7 {
!*  K--构成复合形的顶点数,常用N+1,可多取                                                      *( h* x- h& _1 ~' f
!*  ITMAX--允许最多迭代次数                                                                   *
1 p1 T- P. Y+ S$ B" `! Q!*  IPRINT--打印控制参数,IPRINT=1,打印中间结果,IPRINT=0,不打印中间结果                        */ u  x) o2 I" L4 H: n$ i9 {
!*  ALPHA--反射因子,常用1.3                                                                   *8 u  b4 N, p# Z& k# K% {
!*  BETA--收敛参数,例如函数的幅值乘1E-4                                                       *6 G# y8 L# J0 P
!*  GAMMA--收敛参数,整数,常用值为5                                                            *
& X/ j/ h) h3 `  R7 e/ G!*  DELTA--显式约束违反校正,小正数,如X向量幅值乘1E-4                                          *
, _7 E$ D/ g2 c# X6 X* N!*  X(1,J)--自变量初始可行点,=1,N                                                             *
9 s- r, M: o8 D, P!*                                                                                                      *7 Y0 C9 K6 E- h3 f9 v
!*      4.输出变量说明                                                                               *
" z' e) a# S" c& o4 B!*  F--目标函数最大值勤                                                                       *# m, V5 s# H3 Q' a0 w! ?) O
!*  X(I)--自变量最优值,I=1,N                                                                  *8 v0 C9 r$ ]3 c1 ]! ]7 `/ T2 w" }# s
!*                                                                                                      *8 J) j0 p$ J7 R# T# c. {
!*      5.使用方法                                                                                   *
5 L0 y  E+ G+ _3 z!*  1)用户按照待解问题修改主程序PARAMETER的N,M,K值                                            *
% _8 C  a5 x5 i. V# g! ?$ \$ g) q: f# f!*  2)在子程序FUNC中给定目标函数                                                              *5 f. E( h3 @. [; g
!*  3)在子程序CONST中给定Hi和Gi,显式约束必须放在隐式约束前面                                  *
# X: e( ~# k/ q, o2 ~$ o& \!*  4)编写一个数据文件COMPDAT,文件中的数据依次为下列变量的值,每个数之间用逗号分开             *   $ X0 H& Q" ~" t
!*      ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTA,X(1,1),X(1,2),…,X(1,N)                          *
: Y! U( G$ {* g- i4 C!*      6.程序内容                                                                                   *
4 l/ v3 k8 a9 ^+ K! }' i6 v!*  1)本程序由一个主程序和六个子程序组成,主程序首先给定N,M,K值,然后定义数组维数             *
- J: o4 Z% ?3 r$ v2 \" q% l!*   PARAMETER(N=,M=,K=)                                                               *
+ \$ V) h/ I6 q( J& [  n7 T) j!*   DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N)                                      *( u* T0 h# q* K( t. t
!*  主程序中提供自变量的初始值,输入已知参数及打印最后结果面                                  *4 U( b7 y* I& |  a8 |
!*  2)各子程序的作用分别为了                                                                  *   
* l# K. f" X! t8 v$ a!*      CONSX—这是一个主要子程序,调用其它于程序及输出中间结果                               *
2 y- a4 O, w* I" |% R& ]# @) \!*      CHECK—检查所有的点是否满足约束条件,对违背约束的点进行校正                            *4 e/ Z9 F9 M# s* S" Q1 s
!*      CENTR—计算中心点                                                                     *7 c3 Q% p7 S  ~" c3 I- U! }
!*      FUNC —目标函数,由用户提供                                                           *
' e1 k% y! r9 W: s!*      CONST—规定显式和隐式约束                                                             *# `$ b9 }: y2 g+ b5 X
!*      RANDU—产生随机数                                                                     *
7 M/ X* M# ]# S/ R) d!*************************************************************************************************% H8 ~* z3 }- b, o& P

% L) V( ~5 V! c2 k# U* ?
+ n) x+ i( r! p$ o$ U- b
$ Y1 y* ~( @' o0 j




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