数学建模社区-数学中国
标题:
复合形法求解约束最优化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