Esempio n. 1
0
void  main ()
{
	int  i;
	initiate ();//读入数据,初始化聚类中心,参数设定默认值
	for (i = 1 ; ; i++)
	{
		input ();//显示、修改参数
		allocate ();//完成第2-6步
		if (i == I)
		{
			Dm = 0;
			converge ();
			break;
		}
		if (groupnum <= K / 2)  diverge ();
		else 
		{
			if ((groupnum >= K * 2) | ( i % 2 == 0))
				converge ();
			else 
				diverge ();
		}		
		renum ();		
	}
	showresult ();
	free (datafield);
	free (ccdhead);
	for (i = 0 ; i < 100 ; i++)
		free (group[i].center);
}
Esempio n. 2
0
void  input ()
{
	char  choice;
	printf ("\n\n现用的参数取值:\n");
	printf ("K = %d\n,Nmin=%d\n,Ds=%f\n,Dm=%f\n,L=%d\n,I=%d\n",K,Nmin,Ds,Dm,L,I);
	showresult();
	printf ("是否需要进行修改?(Y/N)\n");
	scanf("%s" , & choice);
	choice = toupper (choice);
	if (choice == 'Y')
	{
		printf ("\n请输入预期的聚类中心数目:");
		scanf ("%d" , &K);
		printf ("\n请输入每一聚类域中最少样本数:");
		scanf ("%d" , &Nmin);
		printf ("\n请输入一个聚类域中样本距离分布的标准差:");
		scanf ("%f" , &Ds);
		printf("\n请输入两聚类中心之间的最小距离:");
		scanf ("%f" , &Dm);
		printf ("\n请输入一次迭代运算中可以合并的聚类中心的最多数目:");
		scanf ("%d" , &L);
		printf ("\n请输入最大迭代次数:");
		scanf ("%d" , &I);
	}
}
Esempio n. 3
0
void mainwin::OnNextClick(wxCommandEvent& event)
{
    vector<string>* crcresults = m_core.getcrcresults();
    ((wxTextCtrl*)FindWindow(XRCID("ID_SCROLLEDWINDOW")))->AppendText(crcresults->at(clicknum++) + "\n");

    if (clicknum >= crcresults->size())
        showresult();
}
Esempio n. 4
0
void mainwin::OnGenerateClick( wxCommandEvent& event )
{
    wxTextCtrl *showarea;
    if (FindWindow(XRCID("ID_SCROLLEDWINDOW")))
    {
        showarea = (wxTextCtrl*)FindWindow(XRCID("ID_SCROLLEDWINDOW"));

        vector<string>* crcresults = m_core.getcrcresults();
        for (; clicknum < crcresults->size(); clicknum++)
            showarea->AppendText(crcresults->at(clicknum) + "\n");
        showresult();
    }
}
Esempio n. 5
0
void game()
{
    int model;
    model=modelchoice();
    memset(info[MAXN],0,MAXN*sizeof(info[MAXN]));
    //将info数组全部置为空
    do
    {
        showchess();
        if( putchess(model) )
            model= model==1 ? 2 : 1 ;
    } while( judge() == 0 );
    showresult( judge() );
}
int main (int argc, char **argv) {
  int i, flag;
  flag = 0;
  initiate();   // 产生初始化群体
  evaluation(0);  // 对初始化种群进行评估、排序
  for (i = 0; i < MAXloop; i++) {   // 进入进化循环,当循环次数超过MAXloop所规定的值时终止循环,flag值保持为0
    cross();    // 进行交叉操作
    evaluation(1);  // 对子种群进行评估、排序
    selection();    // 从父、子种群中选择最优的NUM个作为新的父种群
    if (record() == 1) {  // 如果满足终止规则1时将flag置1,停止循环
      flag = 1;
      break;
    }
    mutation();   // 进行变异操作
  }
  showresult(flag);   // 按flag值显示寻优结果
  return 0;
}
Esempio n. 7
0
void main()
{
	int i,flag;
	flag=0;
	initiate();				//产生初始化种群 
    evaluation( 0 );		//对初始化种群进行评估、排序 
	for( i = 0 ; i < MAXloop ; i++ )
	{
		cross();			//进行交叉操作 
		evaluation( 1 );	//对子种群进行评估、排序 
		selection();		//对父子种群中选择最优的NUM个作为新的父种群 
		if( record() == 1 )	//满足终止规则1,则flag=1并停止循环 
		{
			flag = 1;
			break;
		}
		mutation();			//变异操作 
	}
	showresult( flag );		//按照flag显示寻优结果 
}
Esempio n. 8
0
void main()
{
	int flag;       //标记扩展是否成功	
	for( ; ; )
	{
		initiate();
		flag = search ();
		if(flag == 1)
		{
			recorder();
			releasemem();
			showresult();
			goon();
		}
		else
		{
			printf("无法找到符合条件的解");
			releasemem();
			goon();
		}
	}
}
int dofsfile(char *filename)
{
   char result[CCHMAXPATH];
   int  rc, attrib;
   int  found = NOTFOUND;

   if (fmf_init(filename, FMF_ALL_FILES, FMF_NO_SUBDIR))
     return(NOTFOUND);
   else
     {
        do
          {
             rc = fmf_return_next(result, &attrib);
             if (rc == 0)
               {
                 showresult(result);
                 found = FOUND;
               }
          } while (!rc && isambig(filename));
     }
   fmf_close();
   return(found);
}
Esempio n. 10
0
//Jansion.zhou
void SVDeviceTest::NewCreateContain()
{
	m_pContentTable = new WSPopTable(this);
    if(m_pContentTable)
    {
		m_pContentTable->AppendRows(m_szResult);
		m_pWait = new WText("", (WContainerWidget *)m_pContentTable->GeRowContentTable(0)->elementAt(0, 0));

		string strTmp = "<div id='";
		strTmp += "listpan1";
		strTmp += "' class='panel_item'>";
		new WText(strTmp, (WContainerWidget *)m_pContentTable->GeRowContentTable(0)->elementAt(1, 0));

		m_pSubContent = new WTable(m_pContentTable->GeRowContentTable(0)->elementAt(1, 0));
		if (!m_pSubContent)
		{
			return;
		}

		new WText("</div>", (WContainerWidget *)m_pContentTable->GeRowContentTable(0)->elementAt(1, 0));
		
		//设置高度
		strListHeights += "200";
		strListHeights += ",";
		strListPans += "listpan1";
		strListPans += ",";
		strListTitles +=  m_pSubContent->formName();
		strListTitles += ",";
		
		m_pFinish = new WText("", (WContainerWidget *)m_pContentTable->GeRowContentTable(0)->elementAt(2, 0));

		m_pContentTable->GeRowActionTable(0)->setStyleClass("widthauto");

		m_pClose = new WSPopButton(m_pContentTable->GeRowActionTable(0)->elementAt(0, 0), m_szClose, "button_bg_m.png", m_szClose, false);
		if(m_pClose)
		{
			m_pClose->setToolTip(m_szCloseTip);
			WObject::connect(m_pClose, SIGNAL(clicked()), this, SLOT(closeWnd()));
		}
		m_pContentTable->GeRowActionTable(0)->elementAt(0, 0)->setContentAlignment(AlignCenter);
    }

	//int RowList = m_pContentTable->GeRowActionTable(0)->numRows();
	m_pHideButton = new WPushButton("hide button", m_pContentTable->GeRowActionTable(0)->elementAt(0, 1));
    if(m_pHideButton)
    {
		OutputDebugString("--------------- is   --------------\n");
        WObject::connect(m_pHideButton, SIGNAL(clicked()), this, SLOT(showresult()));
        m_pHideButton->hide();
    }


	pTranslateBtn = new WPushButton(strTranslate, m_pContentTable->GeRowActionTable(0)->elementAt(0, 2));
	connect(pTranslateBtn, SIGNAL(clicked()), this, SLOT(Translate()));	
    //pTranslateBtn->setToolTip(strTranslateTip);
	pTranslateBtn->hide();

	pExChangeBtn = new WPushButton(strRefresh, m_pContentTable->GeRowActionTable(0)->elementAt(0, 3));
	connect(pExChangeBtn, SIGNAL(clicked()), this, SLOT(ExChange()));	
	//pExChangeBtn->setToolTip(strRefreshTip);
	pExChangeBtn->hide();
}
//根据用户的设置,重新调整分段即相应信息
bool NumberSegmentIdentification::setNumberSegmentPropety(qulonglong startNumber,
                                                          qulonglong endNumber,
                                                          IdentificationState command)
{
    qDebug()<<"setNumberSegmentPropety";
    if( startNumber>=endNumber || startNumber<MinPhoneNumber || endNumber>=MaxPhoneNumber)
    {
        qDebug()<<" setNumberSegmentPropety NumberSegment format wrong。";
        return false;
    }
//    QString startNumber = QString::number(startNumber);
//    QString endNumberString = QString::number(endNumber);

    //![0]节点排序
    QList<qulonglong> allStartNumber = records.keys();
    if(!allStartNumber.contains(startNumber)) //某一号段新的起点或结点
        allStartNumber.append(startNumber);
    if(!allStartNumber.contains(endNumber+1)) //某一号段新的起点或结点
        allStartNumber.append(endNumber+1);
    if(!allStartNumber.contains(MaxPhoneNumber)) //增加边界
        allStartNumber.append(MaxPhoneNumber);

    std::list<qulonglong> allStartNumber_stl = allStartNumber.toStdList();
    allStartNumber_stl.sort(); //排序
    allStartNumber = QList<qulonglong>::fromStdList(allStartNumber_stl);

    //两个节点点所在的位置(已经排好序)
    int startNumberIndex = allStartNumber.indexOf(startNumber);
    int endNumberIndex = allStartNumber.indexOf(endNumber+1);

    //![1]首先确定用户设置的号段(startNumber与endNumber之间)
    if(!records.contains(startNumber))
    {
        //新的中间段,startNumber与endNumber为号段
        struct NumberSegmentInformation numberSegmentInformation;
        numberSegmentInformation.startNumber = startNumber;
        numberSegmentInformation.endNumber = endNumber;
        numberSegmentInformation.count = 0;
        numberSegmentInformation.state = command;

        //插入到记录表中
        records.insert(startNumber,numberSegmentInformation);
    }
    else
    {
        records[startNumber].state = command;
        records[startNumber].endNumber = endNumber;
    }
    //重新统计该号段的号码个数
    records[startNumber].Numbers.clear();
    qDebug()<<"startNumber,endNumber:" +QString::number(startNumber) +" ~ " +QString::number(endNumber);

    for(int i =0;i <allNotingNumbers.count();i++)
    {
        if(allNotingNumbers.at(i) >=records[startNumber].startNumber &&
                allNotingNumbers.at(i)<=records[startNumber].endNumber)
        {
            records[startNumber].Numbers.append(allNotingNumbers.at(i));
            qDebug()<<"startNumber~endNumber,add:" +QString::number(allNotingNumbers.at(i));
        }

    }
    records[startNumber].count = records[startNumber].Numbers.count();

     qDebug()<<"after startNumber,endNumber:";
     showresult();
    //![2]确定endNumber+1与后面的号段合并,以endNumber+1为起点,以下一个号段的结点为结点
    if(!records.contains(endNumber+1))
    {
        struct NumberSegmentInformation numberSegmentInformationEnd;
        numberSegmentInformationEnd.startNumber = endNumber+1;
        numberSegmentInformationEnd.endNumber = allStartNumber[endNumberIndex+1]-1; //下一个结点的起始位置-1
        numberSegmentInformationEnd.count = 0;
        if(records.contains(allStartNumber[endNumberIndex+1]))
        {
            numberSegmentInformationEnd.state =records[allStartNumber[endNumberIndex+1]].state;
            //清除重复的记录
            records.remove(allStartNumber[endNumberIndex+1]);
        }
        else
            numberSegmentInformationEnd.state = Noting;

        records.insert(numberSegmentInformationEnd.startNumber,numberSegmentInformationEnd);
        //重新统计该号段的号码个数
        records[endNumber+1].Numbers.clear();
        qDebug()<<"endNumber+1~next:" +
                  QString::number(records[endNumber+1].startNumber) +" ~ " +
                  QString::number(records[endNumber+1].endNumber);
        for(int i =0;i <allNotingNumbers.count();i++)
        {
            if(allNotingNumbers.at(i) >=records[endNumber+1].startNumber &&
                    allNotingNumbers.at(i)<=records[endNumber+1].endNumber)
            {
                records[endNumber+1].Numbers.append(allNotingNumbers.at(i));
                qDebug()<<"endNumber+1~next,add:" +QString::number(allNotingNumbers.at(i));
            }
        }
        records[endNumber+1].count = records[endNumber+1].Numbers.count();
    }

    //![3]确定startNumber与前面的号段合并,以前一个号段的起点为起点,以startNumber-1为结点
    if(startNumberIndex>0)
    {
        qulonglong prestartNumber = allStartNumber[startNumberIndex-1];
        records[prestartNumber].endNumber = startNumber -1;
        //重新统计该号段的号码个数
        records[prestartNumber].Numbers.clear();
        qDebug()<<"pre~startNumber -1:" +
                  QString::number(records[prestartNumber].startNumber) +" ~ " +
                  QString::number(records[prestartNumber].endNumber);
        for(int i =0;i <allNotingNumbers.count();i++)
        {
            if(allNotingNumbers.at(i) >=records[prestartNumber].startNumber &&
                    allNotingNumbers.at(i)<=records[prestartNumber].endNumber)
            {
                records[prestartNumber].Numbers.append(allNotingNumbers.at(i));
                qDebug()<<"pre~startNumber -1,add:" +QString::number(allNotingNumbers.at(i));
            }
        }
        records[prestartNumber].count = records[prestartNumber].Numbers.count();

    }
    //![4]去除startNumber和endNumber号段见多余的记录表
    for(int i = startNumberIndex+1;i<endNumberIndex;i++)
    {
        records.remove(allStartNumber[i]);
    }
    //![5]保存数据
    saveKeyNumberSegments();
    return true;
}