BOOL CNetClient::OnAllVideoTypes() { //CMainFrame *pWnd=(CMainFrame*)AfxGetMainWnd(); //CTypeManager typeMgr(&pWnd->m_adoConnection); CTypeManager typeMgr(&g_pWnd->m_adoConnection); CList<CType,CType> lstType; typeMgr.GetAllType(&lstType); CType type; CString strData; //发送的字符串的格式:"战争片,1,喜剧片,2,古装片,3 " for (int i=0;i<lstType.GetCount();i++) { type=lstType.GetAt(lstType.FindIndex(i)); strData+=type.strTypeName; strData+=","; CString strID; strID.Format("%d,",type.nTypeID); strData+=strID; } //首先发送数据长度,然后发送数据 int nLen=strData.GetLength(); LPSTR pData=(LPSTR)malloc(nLen+1); memset(pData,0,nLen+1); strcpy(pData,strData); SendData(VODNETCMD_TYPES_RET,pData,strData.GetLength()); free(pData); return TRUE; }
BOOL CNetClient::OnVideosByTypeID() { //接收客户端的数据 GETVIDEOS getVideo; if (!RecvData(&getVideo,sizeof(getVideo))) { return FALSE; } //数据库查询指定类型ID的所有视频 //CMainFrame *pWnd=(CMainFrame*)AfxGetMainWnd(); //CVideoManager videoMgr(&pWnd->m_adoConnection); CVideoManager videoMgr(&g_pWnd->m_adoConnection); CList<CVideo,CVideo> lstVideo; videoMgr.GetVideosByTypeID(getVideo.typdID,&lstVideo); //返回给客户端数据,返回的视频信息的格式, //"敢死队,1,泰囧,22,西游记,31 " CVideo v; CString strData; for (int i=0;i<lstVideo.GetCount();i++) { v=lstVideo.GetAt(lstVideo.FindIndex(i)); strData+=v.strVideoName; strData+=","; CString strID; strID.Format("%d,",v.nVideoID); strData+=strID; } //首先发送数据长度,然后发送数据 int nLen=strData.GetLength(); LPSTR pData=(LPSTR)malloc(nLen+1); memset(pData,0,nLen+1); strcpy(pData,strData); SendData(VODNETCMD_TYPES_RET,pData,strData.GetLength()); free(pData); return TRUE; }
/** * 响应鼠标单击按钮;Reverse * @param CBCGPGridCtrl* pGridCtrlEdit 输入行 * @param CBCGPGridCtrl* pGridCtrlList 列表 * @param CList<int, int>* plsNb Nb号队列指针 * @return void */ void CGridCtrlOperation::OnBnClickedButtonReverseA(CBCGPGridCtrl* pGridCtrlEdit, CBCGPGridCtrl* pGridCtrlList) { CList<int, int> ListNb; CList<int, int>* plsNb = &ListNb; // 得到索引队列,修改操作、删除操作、颠倒操作 if(false == GetIndexListForChangeOrDeleteOrReverse(pGridCtrlEdit, pGridCtrlList, plsNb)) { return; } CBCGPGridRow* pRow = NULL; // 行 CBCGPGridRow* pRowMax = NULL; // 排序行 CBCGPGridRow* pRowNew = NULL; // 新行 CList<int, int> olsNb; int iNbStart = -1; int iNbEnd = -1; int iRowIndex = -1; int i, j; POSITION posMax; POSITION pos; int iNbMax; int iNb; // 得到Nb队列 for(i = 0; i < plsNb->GetCount(); i++) { pos = plsNb->FindIndex(i); iRowIndex = plsNb->GetAt(pos); iNb = pGridCtrlList->GetRow(iRowIndex)->GetData(); olsNb.AddTail(iNb); if(0 == i) { iNbStart = iNb; } if((plsNb->GetCount() - 1) == i) { iNbEnd = iNb; } } // 对Nb排序,由小到大 for(i = 0; i < olsNb.GetCount(); i++) { posMax = olsNb.FindIndex(i); iNbMax = olsNb.GetAt(posMax); for(j = i + 1; j < olsNb.GetCount(); j++) { pos = olsNb.FindIndex(j); iNb = olsNb.GetAt(pos); if(iNbStart < iNbEnd) { if(iNbMax > iNb) { iNbMax = iNb; posMax = pos; } } else { if(iNbMax < iNb) { iNbMax = iNb; posMax = pos; } } } olsNb.RemoveAt(posMax); olsNb.AddHead(iNbMax); } for(i = 0; i < plsNb->GetCount(); i++) { pos = plsNb->FindIndex(i); iRowIndex = plsNb->GetAt(pos); pRow = pGridCtrlList->GetRow(iRowIndex); posMax = olsNb.FindIndex(i); iNbMax = olsNb.GetAt(posMax); pRowMax = pGridCtrlList->FindRowByData(iNbMax); pRowNew = pGridCtrlList->CreateRow(pGridCtrlList->GetColumnCount()); pGridCtrlList->AddRow(pRowNew, FALSE); pRowNew->SetData(pRow->GetData()); pRowNew->GetItem(0)->SetValue(pRow->GetItem(0)->GetValue()); for(int j = 1; j < pGridCtrlList->GetColumnCount(); j++) { COleVariant oVariant = pRow->GetItem(j)->GetValue(); pRowNew->GetItem(j)->SetValue(oVariant); } pRow->SetData(pRowMax->GetData()); pRow->GetItem(0)->SetValue(pRowMax->GetItem(0)->GetValue()); for(int j = 1; j < pGridCtrlList->GetColumnCount(); j++) { COleVariant oVariant = pRowMax->GetItem(j)->GetValue(); pRow->GetItem(j)->SetValue(oVariant); } pRowMax->SetData(pRowNew->GetData()); pRowMax->GetItem(0)->SetValue(pRowNew->GetItem(0)->GetValue()); for(int j = 1; j < pGridCtrlList->GetColumnCount(); j++) { COleVariant oVariant = pRowNew->GetItem(j)->GetValue(); pRowMax->GetItem(j)->SetValue(oVariant); } pGridCtrlList->RemoveRow((pGridCtrlList->GetRowCount() - 1), FALSE); } pGridCtrlList->AdjustLayout(); }
//current 变化后,以上没有问题了。 void Genetic::crossoveroperator() { //非均匀算术线性交叉,浮点数适用,alpha ,beta是(0,1)之间的随机数 //对种群中两两交叉的个体选择也是随机选择的。也可取beta=1-alpha; //current的变化会有一些改变。 int i,j; double alpha,beta; CList <int,int> index; int point,temp; double p; // srand( (unsigned)time( NULL ) ); for (i=0;i<popsize;i++)//生成序号 { index.InsertAfter (index.FindIndex(i),i); } for (i=0;i<popsize;i++)//打乱序号 { point=rand()%(popsize-1); temp=index.GetAt(index.FindIndex(i)); index.SetAt(index.FindIndex(i), index.GetAt(index.FindIndex(point))); index.SetAt(index.FindIndex(point),temp); } for (i=0;i<popsize-1;i+=2) { //按顺序序号,按序号选择两个母体进行交叉操作。 p=double(rand()%10000)/10000.0; if (p<crossoverrate) { alpha=double(rand()%10000)/10000.0; beta=double(rand()%10000)/10000.0; current=population.GetAt(population.FindIndex(index.GetAt(index.FindIndex(i)))); current1=population.GetAt(population.FindIndex(index.GetAt(index.FindIndex(i+1))));//临时使用 current1代替 for(j=0;j<variablenum;j++) { //交叉 double sign; sign=rand()%2; if(sign) { current.chromosome[j]=(1-alpha)*current.chromosome[j]+ beta*current1.chromosome[j]; } else { current.chromosome[j]=(1-alpha)*current.chromosome[j]- beta*current1.chromosome[j]; } if (current.chromosome[j]>variabletop[j]) //判断是否超界. { current.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+ variablebottom[j]; } if (current.chromosome[j]<variablebottom [j]) { current.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+ variablebottom[j]; } if(sign) { current1.chromosome[j]=alpha*current.chromosome[j]+ (1- beta)*current1.chromosome[j]; } else { current1.chromosome[j]=alpha*current.chromosome[j]- (1- beta)*current1.chromosome[j]; } if (current1.chromosome[j]>variabletop[j]) { current1.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+ variablebottom[j]; } if (current1.chromosome[j]<variablebottom [j]) { current1.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+ variablebottom[j]; } } //回代 } newpopulation.InsertAfter (newpopulation.FindIndex(i),current); newpopulation.InsertAfter (newpopulation.FindIndex(i),current1); }