📄 pabmin实验品.cpp
字号:
#include<iostream.h>
#include<iomanip.h>
void main()
{
double a[16][5]={{1,1,100,0.2,200},{1,2,200,0.23,400},{1,3,400,0.25,600},{1,4,600,0.32,800},{2,1,180,0.17,300},{2,2,300,0.19,600},{2,3,600,0.22,900},{2,4,900,0.3,1200},{3,1,180,0.17,300},{3,2,300,0.19,600},{3,3,600,0.22,900},{3,4,900,0.3,1200},{4,1,200,0.15,330},{4,2,330,0.17,660},{4,3,660,0.21,990},{4,4,990,0.27,1320}};
double temp[1][5];
double com[7][9]={0};//加入,可以删除
int i,j,k;
int t,t1;
int d[4];
double p[1][8],b[1][8],c[1][8],q[1][8];//加入代替“double p,b,c,d;”,可以删除
double num0[1][8],num1[1][8],num2[1][8],num3[1][8];//加入代替“double num0,num1,num2,num3;”
double price[1][4]={0};
double x1[1][8],x2[1][8],x3[1][8],p4[1][8];//加入代替double x1,x2,x3,p4;
double min[1][8]={4000,4000,4000,4000,4000,4000,4000,4000};//加入代替double min=4000;
double max[1][8]={0};//double max=0;
double load[1][8]={2000,2200,2800,2400,2600,3000,2900,2100};//加入代替double load=2100;
double mcp[1][8]={0};//修改double mcp;
int T=8;//8个负荷,加入,可以删除
int N=4;//加入,可以删除
for(i=1;i<=N;i++)//
com[i][0]=i;
com[N+1][0]=0;
com[N+2][0]=0;//加入,可以删除
for(i=0;i<15;i++)
for(j=i+1;j<16;j++)
{
if(a[i][3]>a[j][3])
for(k=0;k<5;k++)
{
temp[0][k]=a[i][k];
a[i][k]=a[j][k];
a[j][k]=temp[0][k];
}
}
cout<<setw(26)<<"报价排队表"<<endl;
cout<<setw(9)<<"电厂号"<<setw(9)<<"报价曲段"<<setw(6)<<"下限"<<setw(8)<<"报价"<<setw(8)<<"上限";
cout<<endl;
cout<<endl;
for(i=0;i<15;i++)
{
for(j=0;j<5;j++)
cout<<setw(8)<<a[i][j];
cout<<endl;
}
for(t=0;t<T;t++)
{
for(d[0]=0;d[0]<15;d[0]++)//d[0]代替i
{
x1[0][t]=load[0][t]-a[d[0]][4];//修改x1=load-a[i][4];
for(d[1]=d[0]+1;d[1]<16;d[1]++)//d[1]代替j
if(a[d[0]][0]!=a[d[1]][0])
{
x2[0][t]=x1[0][t]-a[d[1]][4];//修改x2=x1-a[j][4];
for(d[2]=0;d[2]<16;d[2]++)//d[2]代替k
if((a[d[2]][0]!=a[d[0]][0])&&(a[d[2]][0]!=a[d[1]][0]))
{
x3[0][t]=x2[0][t]-a[d[2]][4];//修改x3=x2-a[k][4];
if(x3[0][t]>0)//if(x3>0)
{
for(d[3]=0;d[3]<16;d[3]++)//d[3]代替s
if((a[d[3]][0]!=a[d[0]][0])&&(a[d[3]][0]!=a[d[1]][0]))
if((a[d[3]][0]!=a[d[2]][0])&&((x3[0][t]-a[d[3]][4])<=0))//if((a[s][0]!=a[k][0])&&((x3-a[s][4])<=0))
{
p4[0][t]=x3[0][t];//p4=x3;
if(((p4[0][t]*a[d[3]][3]+a[d[2]][4]*a[d[2]][3]+a[d[1]][4]*a[d[1]][3]+a[d[0]][4]*a[d[0]][3])!=0)&&((p4[0][t]*a[d[3]][3]+a[d[2]][4]*a[d[2]][3]+a[d[1]][4]*a[d[1]][3]+a[d[0]][4]*a[d[0]][3])<min[0][t]))
{
min[0][t]=p4[0][t]*a[d[3]][3]+a[d[2]][4]*a[d[2]][3]+a[d[1]][4]*a[d[1]][3]+a[d[0]][4]*a[d[0]][3];
p[0][t]=p4[0][t];
num0[0][t]=a[d[3]][0];//num0=a[s][0];
price[0][0]=a[d[3]][3];
b[0][t]=a[d[2]][4];//b=a[k][4];
num1[0][t]=a[d[2]][0];//num1=a[k][0];
price[0][1]=a[d[2]][3];
c[0][t]=a[d[1]][4];//c=a[j][4];
num2[0][t]=a[d[1]][0];//num2=a[j][0];
price[0][2]=a[d[1]][3];
q[0][t]=a[d[0]][4];//d=a[i][4];
num3[0][t]=a[d[0]][0];//num3=a[i][0];
price[0][3]=a[d[0]][3];
}
}
}
}
}
}
for(t1=0;t1<N;t1++)
if(price[0][t1]>max[0][t])
max[0][t]=price[0][t1];
mcp[0][t]=max[0][t]*load[0][t];
if(min[0][t]==4000)
cout<<"error!"<<endl;
else
{
cout<<"单位小时PAB结算为"<<min[0][t]<<"千元/时"<<endl;
cout<<"当总负荷为"<<load[0][t]<<"MW时"<<endl;
cout<<num0[0][t]<<"号机组分得功率"<<p[0][t]<<"MW"<<",报价为"<<price[0][0]<<"元/度"<<endl;
cout<<num1[0][t]<<"号机组分得功率"<<b[0][t]<<"MW"<<",报价为"<<price[0][1]<<"元/度"<<endl;
cout<<num2[0][t]<<"号机组分得功率"<<c[0][t]<<"MW"<<",报价为"<<price[0][2]<<"元/度"<<endl;
cout<<num3[0][t]<<"号机组分得功率"<<q[0][t]<<"MW"<<",报价为"<<price[0][3]<<"元/度"<<endl;
cout<<"边际电价为"<<max[0][t]<<"元/度"<<endl;
cout<<"单位小时MCP结算费为"<<mcp[0][t]<<"千元/时"<<endl;
cout<<endl;
com[0][t+1]=load[0][t];
com[(int)num0[0][t]][t+1]=p[0][t];
com[(int)num1[0][t]][t+1]=b[0][t];
com[(int)num2[0][t]][t+1]=c[0][t];
com[(int)num3[0][t]][t+1]=q[0][t];
com[N+1][t+1]=min[0][t];
com[N+2][t+1]=mcp[0][t];
}
}
cout<<setw(7)<<"电厂号"<<setw(7)<<"时段1"<<setw(7)<<"时段2"<<setw(7)<<"时段3"<<setw(7)<<"时段4"<<setw(7)<<"时段5"<<setw(7)<<"时段6"<<setw(7)<<"时段7"<<setw(7)<<"时段8"<<endl;
for(i=0;i<7;i++)
{
for(j=0;j<9;j++)
cout<<setw(7)<<com[i][j];
cout<<endl;
}
cout<<"说明:本决策是按照PAB结算为最优函数作出的,上表中倒数第二行是按照PAB结算,倒数第一行是按照MCP结算的购电费"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -