資源簡介
優化設計中復合形法C語言程序,多維優化,你值得擁有
代碼片段和文件信息
#include?
#include?
#include?
#define?N?2???????????????/*優化問題的維數N*/
#define?K?4???????????????/*復合形法頂點數K*/
#define?N1?2??????????????/*約束方程個數K*/
#define?E?0.00000001???????/*復合形法迭代精度*/
#define?NM?500????????????/*尋找初始復合形的最大次數*/
int?H=0L=0;??????????????????????/*H,L--復合形頂點壞點和好點頂點號*/
double?f[K];?????????????????????/*程序頂點值從f[0]開始*/
struct
{
double?x1[N];
}Tpoint[K]xcxr;?????/*Tpoint存放K個點的坐標,xcxr分別為中心點和映射點坐標*/
/*目標函數子程序*/
double?function(double?x[])
{
double?F;
F=x[0]*x[0]+x[1]*x[1]+4;
return(F);
}
/*約束條件子程序*/
int?strain(double?x[])
{
int?ifin=1;
double?g[N1];
g[0]=x[0];
g[1]=x[1];
for(i=0;i if(g[i]<0)
{
fin=0;
break;
}
return(fin);
}
/*初始可行點產生區間*/
void?startab(double?a[]double?b[])
{
a[0]=0;b[0]=10.0;
a[1]=0;b[1]=10.0;
return;
}
/*初始復合形*/
int?startfhx(double?a[]double?b[]int?num)
{
int?ii1iwkk=0;
int?jj1mfh1=1;
double?sum2[N];
double?alfr;
srand(?(unsigned)time(?NULL?)?);?/*srand()用來設置rand()產生隨機數時的隨機數種子*/
do??????????????????????????????/*產生第一個可行點*/
{
for(i=0;i {
r=rand()/32767.;???/*直接調用函數產生隨機數rand()可生成一個0到32767之間的隨機數*/
Tpoint[0].x1[i]=a[i]+r*(b[i]-a[i]);
}
iw=strain(Tpoint[0].x1);
kk=kk+1;
if(kk>num)
{
fh1=2;
return(fh1);
}
}while(iw==0);
for(j=1;j {
for(i=0;i {
r=rand()/32767.;??????/*直接調用函數產生隨機數*/
Tpoint[j].x1[i]=a[i]+r*(b[i]-a[i]);
}
iw=strain(Tpoint[j].x1);
if(iw==0)
{
m=j;
for(i1=0;i1 sum2[i1]=0.;
for(i1=0;i1 for(j1=0;j1 sum2[i1]+=Tpoint[j1].x1[i1];
for(j1=0;j1 xc.x1[j1]=sum2[j1]/m;
alf=0.5;
do?????????/*求中心的映射點*/
{
for(i=0;i Tpoint[m].x1[i]=xc.x1[i]+alf*(Tpoint[m].x1[i]-xc.x1[i]);
iw=strain(Tpoint[m].x1);
}while(iw==0);
}
}
return(fh1);
}
void?suan()??????????????/*找出好點和壞點*/
{
評論
共有 條評論