数学建模社区-数学中国
标题:
复合形法求解约束最优化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, p
0 W; u) D, Z, I% Y0 l
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5