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

📄 powersearchview.cpp

📁 电力黑启动综合程序
💻 CPP
字号:
// PowerSearchView.cpp : implementation of the CPowerSearchView class
//

#include "stdafx.h"
#include "PowerSearch.h"

#include "PowerSearchSet.h"
#include "PowerSearchDoc.h"
#include "PowerSearchView.h"
#include "BusRecord.h"
#include "NodeRecord.h"
#include "malloc.h"
#include "DlgEnrollBus.h"
//#include "engine.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPowerSearchView

IMPLEMENT_DYNCREATE(CPowerSearchView, CRecordView)

BEGIN_MESSAGE_MAP(CPowerSearchView, CRecordView)
	//{{AFX_MSG_MAP(CPowerSearchView)
	ON_BN_CLICKED(IDC_StartPoint, OnStartPoint)
	ON_BN_CLICKED(IDC_Show, OnShow)
	ON_BN_CLICKED(IDC_StepOne, OnStepOne)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPowerSearchView construction/destruction

CPowerSearchView::CPowerSearchView()
	: CRecordView(CPowerSearchView::IDD)
{   
	//{{AFX_DATA_INIT(CPowerSearchView)
	m_pSet = NULL;
	m_startpoint =1 ;
	m_depth = 5;
	m_num = 0;
	m_percent = 0.0f;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CPowerSearchView::~CPowerSearchView()
{
}

void CPowerSearchView::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPowerSearchView)
	DDX_Control(pDX, IDC_LIST1, m_showlist);
	DDX_Text(pDX, IDC_EDIT1, m_startpoint);
	DDX_Text(pDX, IDC_EDIT2, m_depth);
	DDV_MinMaxInt(pDX, m_depth, 2, 6);
	DDX_Text(pDX, IDC_EDIT3, m_num);
	DDX_Text(pDX, IDC_EDIT5, m_percent);
	//}}AFX_DATA_MAP
}

BOOL CPowerSearchView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CRecordView::PreCreateWindow(cs);
}

void CPowerSearchView::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_powerSearchSet;
	CRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
    m_showlist.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
    m_showlist.InsertColumn(0,"厂站1");
    m_showlist.SetColumnWidth(0,75);
    m_showlist.InsertColumn(1,"厂站2");
    m_showlist.SetColumnWidth(1,75);
    m_showlist.InsertColumn(2,"厂站3");
    m_showlist.SetColumnWidth(2,75);
    m_showlist.InsertColumn(3,"厂站4");
    m_showlist.SetColumnWidth(3,75);
    m_showlist.InsertColumn(4,"厂站5");
    m_showlist.SetColumnWidth(4,75);
    m_showlist.InsertColumn(5,"厂站6");
    m_showlist.SetColumnWidth(5,75);
    m_showlist.InsertColumn(6,"厂站7");
    m_showlist.SetColumnWidth(6,75);
    m_showlist.InsertColumn(7,"厂站8");
    m_showlist.SetColumnWidth(7,75);
    m_showlist.InsertColumn(8,"厂站9");
    m_showlist.SetColumnWidth(8,75);
    m_showlist.InsertColumn(9,"厂站10");
    m_showlist.SetColumnWidth(9,75);
   

}

/////////////////////////////////////////////////////////////////////////////
// CPowerSearchView printing

BOOL CPowerSearchView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CPowerSearchView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CPowerSearchView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CPowerSearchView diagnostics

#ifdef _DEBUG
void CPowerSearchView::AssertValid() const
{
	CRecordView::AssertValid();
}

void CPowerSearchView::Dump(CDumpContext& dc) const
{
	CRecordView::Dump(dc);
	
}

CPowerSearchDoc* CPowerSearchView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPowerSearchDoc)));
	return (CPowerSearchDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPowerSearchView database support
CRecordset* CPowerSearchView::OnGetRecordset()
{
	return m_pSet;
}


/////////////////////////////////////////////////////////////////////////////
// CPowerSearchView message handlers
struct resultnode
{
	int road[100];
	struct resultnode *next;
};

void CPowerSearchView::OnStartPoint() 
{
struct resultnode *head;
struct resultnode *p1,*p2;
p1=(struct resultnode *)malloc(sizeof(struct resultnode));
head=p1;
CBusRecord m_busset;
CNodeRecord m_nodeset;
int a[200][100];
int i=0;
int j=0;
int k;
int m;
int node=0;
int h=0;
int w=0;
int count=0;
int visit[50]={0};
UpdateData(TRUE);
m_busset.Open();
m_nodeset.Open();
m_nodeset.MoveFirst();
while((!m_nodeset.IsEOF())&&(m_nodeset.m_column2!=m_startpoint))
{
	m_nodeset.MoveNext();
}

if(m_nodeset.m_column4==0)
{
	AfxMessageBox("此节点不是电厂,请重新输入!");
	goto A;
}
if(m_nodeset.IsEOF())
{
	AfxMessageBox("无此节点,请重新输入!");
	goto A;
}
a[i][j]=m_startpoint;
a[i+1][j]=100;
visit[a[0][0]]=1;
m_busset.MoveFirst();
m_nodeset.MoveFirst();

for(count=0;count<m_depth-1;count++)//循环次数
{   
	while(a[i][j]!=100)
	{   
		int start=a[i][j];
		m_busset.MoveFirst();
        while((m_busset.m_column2!=start)&&(!m_busset.IsEOF()))
		{
	      m_busset.MoveNext();
		}
        while((m_busset.m_column2==start)&&(!m_busset.IsEOF()))
		{ 
			if((visit[m_busset.m_column3]==1))  goto B;
			m_nodeset.MoveFirst();
           while((m_nodeset.m_column2!=m_busset.m_column3)&&(!m_nodeset.IsEOF()))
		   {
             m_nodeset.MoveNext();
		   }

           if(m_nodeset.m_column4==1)
		   {   //添加数据
	         for(int n=0;n<=j;n++)
             p1->road[n]=a[i][n];//添加数组数据
             p1->road[n]=m_nodeset.m_column2;//添加表数据
             //visit[m_nodeset.m_column2]=1;
			 node++;
	          //建立接点
	         p2=(struct resultnode *)malloc(sizeof(struct resultnode));
             p1->next=p2;
	         p1=p2;
		   }

          else
		  {   
			  k=i;
	          while(a[k][j]>0)
			  {
				  k++;
			  }
		      for(m=0;m<=j;m++)   a[k][m]=a[i][m];
		      a[k][m]=m_nodeset.m_column2;
             
		  }
B:		  m_busset.MoveNext();
		}
		i++;
		
	}
	a[k+1][m]=100;
	i++;
	j++;
}


//列表显示
struct resultnode *p;
m_showlist.DeleteAllItems();
p=head;	
w=0;
if(node==0)   AfxMessageBox("无可行方案!");
else
{
for(h=0;(h<node)&&(p->next!=NULL);h++)
{
   
   CString s;
   m_nodeset.MoveFirst();
   while((m_nodeset.m_column2!=p->road[0])&&(!m_nodeset.IsEOF()))
   {
	m_nodeset.MoveNext();
   }
   s=m_nodeset.m_column3;
   m_showlist.InsertItem(w,s,0);
   int i=1;
   while(p->road[i]>0)
   {  m_nodeset.MoveFirst();
      while((m_nodeset.m_column2!=p->road[i])&&(!m_nodeset.IsEOF()))
	  {
	    m_nodeset.MoveNext();
	  }
   s=m_nodeset.m_column3;
   m_showlist.SetItemText(w,i,s);
   i++;
   }
   w++;
   p=p->next;
}
}			
A: m_num=w;
   m_nodeset.MoveFirst();
   float generatornum=0;
   while(!m_nodeset.IsEOF())
   {
	   if(m_nodeset.m_column4==1)  generatornum++;
	   m_nodeset.MoveNext();
   }
   m_percent=((float)(w)/(generatornum-1))*100;
   if(m_percent>100)  m_percent=100;
UpdateData(FALSE);


}

void CPowerSearchView::OnButton1() 
{
	
}

void CPowerSearchView::OnShow() 
{
/*#include "engine.h"
Engine *ep=engOpen(NULL);
CString command;
	//从vc传数据给matlab
    //mxArray *data=mxCreateNumericMatrix(height,wide,mxUINT8_CLASS,mxREAL);
	//memcpy((BYTE *)(mxGetPr(data)),(BYTE *)p_data,wide*height);
	//engPutVariable(ep,"data",data);
    //engEvalString(ep,"data=rot90(data)");
    //执行matlab
     engEvalString(ep,"open_system('overvoltage')");
     engEvalString(ep,"set_param('overvoltage/A','Amplitude','110e3')");
     engEvalString(ep,"set_param('overvoltage/B','Amplitude','110e3')");
     engEvalString(ep,"set_param('overvoltage/C','Amplitude','110e3')");
     engEvalString(ep,"set_param('overvoltage/Distributed Parameters Line','Length','300')");
     engEvalString(ep,"[t,x,y]=sim('overvoltagenew')");
     engEvalString(ep,"save_system('overvoltage')");
     //engEvalString(ep,"plot(t,y)");
   /*
    [amax,index]=max(max(x(:,4:6)));  
    [amax,index1]=max(x(:,(3+index))  );
    tmax=t(index1)
 */
	//从matlab传回数据vc
    //mxArray *T=engGetVariable(ep,"data");
    //memcpy((BYTE *)p_data,(BYTE *)mxGetPr(T),wide*height);
	
    
     //执行VC
}

void CPowerSearchView::OnStepOne() 
{
	float A[5][5]=
	{	1 , 1.0/2 , 4 , 3 , 3,
		2 , 1 , 7 , 5 , 5,
		1.0/4, 1.0/7, 1, 1.0/2,1.0/3,
		1.0/3, 1.0/5, 2, 1, 1,
		1.0/3, 1.0/5, 3, 1, 1
	};
	float B[5][3][3]=
	{
	{   1 , 2 , 5,
	    1.0/2 , 1 , 2,
		1.0/5 , 1.0/2, 1
	},{
	    1 ,1.0/3 ,1.0/8,
		3 ,1 ,1.0/3,
		8 ,3 ,1
	},	{
	   1 ,1 ,3,
	   1 ,1 ,3,
	   1.0/3 ,1.0/3 ,1
	},{
	   1,3,4,1.0/3,1,1,1.0/4,1,1
	},{
	   1,1,1.0/4,1,1,1.0/4,4,4,1
	}
	};	
	int i,j,k,m=5,n=5,m1=3,n1=3;
	float sum=0;
	float w[5],W2[3][5],W[3];
	float A_change[5][5];
	float B_change[5][3][3];
    
	//对判断矩阵做列向量归一化处理
	for(j=0;j<n;j++)
	{
       sum=0;
	   for(i=0;i<m;i++)
	  {
	    sum=sum+ A[i][j];
	  }
	   for(i=0;i<m;i++)
	  {
	   A_change[i][j]=A[i][j]/sum;
	  }
	}
    
	//求判断矩阵的特征向量w
	sum=0;
    for(i=0;i<m;i++)
	{
	  w[i]=0;
	  for(j=0;j<n;j++)
	  {
	    w[i]=w[i]+A_change[i][j];
	  } 
	  sum=sum+w[i];
	}
	for(i=0;i<m;i++)
		w[i]=w[i]/sum;

	//求下层的特征向量构成的矩阵W2
	//同上,先归一化,再求特征向量
	for(k=0;k<n;k++)
	{
	 
	  for(j=0;j<n1;j++)
	  {
	     sum=0;
		for(i=0;i<m1;i++)
		{
		  sum=sum+B[k][i][j];
		}
	    for(i=0;i<m1;i++)
		{
			B_change[k][i][j]=B[k][i][j]/sum;
		}
	  }
	  
	 
	}
	for(k=0;k<n;k++)
	{
	  sum=0;
	  for(i=0;i<m1;i++)
	  {
	    W2[i][k]=0;
		for(j=0;j<n1;j++)
		{
		  W2[i][k]=W2[i][k]+B_change[k][i][j];
		}
		sum=sum+W2[i][k];
	  }
	  
	  for(i=0;i<m1;i++)
		  W2[i][k]=W2[i][k]/sum;
	}
	
	//评估各方案的优劣,用向量W表示
	sum=0;
	for(i=0;i<m1;i++)
	{
	   W[i]=0;
	   for(j=0;j<n;j++)
	   {
	      W[i]=W[i]+W2[i][j]*w[j];
	   }
	   sum=sum+W[i];
	}
	for(i=0;i<m1;i++)
	{ 
	   W[i]=W[i]/sum;
	   //printf(" Evaluation of plan %d :  %f \n",i+1,W[i]);
	}
    //printf("\n");
    //getchar();
	//对各矩阵的一致性进行评价

	//先求判断矩阵的特征值 
    float lamdaA=0,lamdaB[5];
	float Aw[5],Bw[3];
	for(i=0;i<m;i++)
	{
	  Aw[i]=0;
	  for(j=0;j<n;j++)
	  {
	    Aw[i]=Aw[i]+A[i][j]*w[j];
	  }
	  lamdaA=lamdaA+Aw[i]/w[i]/m;
	}
	//printf("lamdaA=%1.3f \n",lamdaA);
    for(k=0;k<m;k++)
	{
	  sum=0;
	  lamdaB[k]=0;
	  for(i=0;i<m1;i++)
	  {
	    Bw[i]=0;
		for(j=0;j<n1;j++)
		{
		  Bw[i]=Bw[i]+B[k][i][j]*W2[j][k];
		}
        lamdaB[k]=lamdaB[k]+Bw[i]/W2[i][k]/m1;
      }
       
	   //printf("lamdaB[%d]=%1.3f \n",k,lamdaB[k]);
	}
	//printf("\n");
  
	//再求一致性指标CI和一致性比率CR;  RI为随机一致性指标
	float RI[12]={0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51};
	float CIA,CRA,CIB[5],CRB[5],CR1,CR2=0,CR;
    CIA=(lamdaA-m)/(m-1);
	CRA=CIA/RI[m-1];
	CR1=CRA;
	for(k=0;k<5;k++)
	{
	  CIB[k]=(lamdaB[k]-m1)/(m1-1);
 	  CRB[k]=CIB[k]/RI[m1-1];
	  CR2=CRB[k]*w[k]+CR2;
	}
	CR=CR1+CR2;
	//printf("the value of CR is :%1.3f \n",CR);
    

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -