⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pabmin实验品.cpp

📁 用动态规划法计算目标函数最小化的优化程序
💻 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 + -