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

📄 vrp67.cpp

📁 蚁群算法解决车辆最优路径问题
💻 CPP
字号:
#include "Pso.h"
#include "MyPso.h"
#include <iostream.h>
#include "Particle.h"
#include "stdio.h"
//#include <afxdb.h>//database head files
//#include <afx.h>
#include <fstream.h>

//using namespace std;

//data只提供容量检查
double data[1][8] = {{1,2,1,2,1,4,2,2}};//容量限制
                    

//全文中无用,这里由于不是采用坐标法,故无用注释之
//double point[2][1] = {{18},{54}};//改动8

int vehicleNum = 2;
int pDim = 8;//改动9
int pNum = 60;//compare with smu //个数必须设较大
double T = 3;
double B = 0.99;
double TEND = 0.01;
double c1 = 1;
double c2 = 1.49;
double wMax = 0.4;
double wMin = 0.4;
double vDown = -1; 
double vUp = 1;
int xDown = 1;
int xUp = 2;
int iterMax = 50;

//CDatabase db;

void main()
{
	MyPso pso(pDim, pNum); //生成微粒群实例
	
	pso.Setc1(c1); //设置自变量上界
    pso.Setc2(c2); //设置自变量下界
    pso.SetwMax(wMax);
	pso.SetwMin(wMin);
	//设置最大速度
    pso.SetvDowm(vDown);
	pso.SetvUp(vUp);
	pso.SetxDown(xDown);
	pso.SetxUp(xUp);

	cout << "\nRun Now:\n" ;
	for(int test=0; test<1; test++)
	{
		//每次运行的时候都要设置iterMax;
		pso.SetiterMax(iterMax);
		pso.Run(iterMax); //运行微粒群
		
		//输出
		double *Result;
		Result = new double[pDim];
		cout << pso.GetBest(Result) << endl;
		for(int i=0; i<pDim; i++)
			cout << Result[i] <<" ";
		cout <<endl;
    
	//怎么存子程序的结果,是个问题;
	double *sub_Result_Best;
	sub_Result_Best = new double [vehicleNum*pDim];
	pso.GetSubResult(sub_Result_Best);
	
	for(int j=0; j<vehicleNum*pDim; j++) 
	{
		cout << sub_Result_Best[j] << " ";
		if((j+1)%pDim==0)
			cout <<endl;
	}
	
	cout<<endl<<"end of one operation"<<endl;

	//将结果写入数据库
/*	if (db.IsOpen()==0) 
	{
		db.Open("VRP");
	}	
	CString inse;
	inse.Format("insert into 8city values(%d,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f)"
		,,,,
		,sub_Result_Best[0], sub_Result_Best[1], sub_Result_Best[2], sub_Result_Best[3], sub_Result_Best[4], sub_Result_Best[5], sub_Result_Best[6], sub_Result_Best[7]
		,
	db.ExecuteSQL(inse);
*/
	ofstream myf("f:\\ally.txt",ios::ate);
	    myf << pso.bestIter <<"  "<< pso.GetBest(Result) << endl
			<< Result[0]<<" "<<Result[1]<<" "<<Result[2]<<" "<<Result[3]<<" "<<Result[4]<<" "<<Result[5]<<" "<<Result[6]<<" "<<Result[7]<<endl
			<< sub_Result_Best[0]<<" "<<sub_Result_Best[1]<<" "<<sub_Result_Best[2]<<" "<<sub_Result_Best[3]<<" "<<sub_Result_Best[4]<<" "<<sub_Result_Best[5]<<" "<<sub_Result_Best[6]<<" "<<sub_Result_Best[7]<<endl
			<< sub_Result_Best[8]<<" "<<sub_Result_Best[9]<<" "<<sub_Result_Best[10]<<" "<<sub_Result_Best[11]<<" "<<sub_Result_Best[12]<<" "<<sub_Result_Best[13]<<" "<<sub_Result_Best[14]<<" "<<sub_Result_Best[15]<<endl
			<<endl
			<<endl
			<<endl;

	delete []Result;
	Result = NULL;
	delete []sub_Result_Best;
	sub_Result_Best = NULL;

	}
}

⌨️ 快捷键说明

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