📄 vpr.cpp
字号:
// VPR.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "vpr1.h"
#include "iomanip"
using namespace std;
int main(int argc, char* argv[])
{
double temperature; //模拟退火的初始温度
double tau; //最低温度
double speed; //汽车速度
UINT capacity; //汽车容量
UINT count; //客户数
vector<CClient> client; //客户需求信息
double * distance_data; //客户距离信
double time_low,time_uper,need,server_time;
cout<<"请输入客户数:";
cin>>count;
cout<<endl;
cout<<"请输入中心库时间窗的开始时间:";
cin>>time_low;
cout<<"请输入中心库时间窗的结束时间:";
cin>>time_uper;
CClient clien(0,0,time_low,time_uper,time_low,0,1);
client.push_back(clien);
cout<<"现在开始输入客户信息.输入顺序为:"<<endl<<"(1)需求量;(2)服务时间;(3)时间窗开始时间;(4)时间窗结束时间"<<endl;
for (int i=1;i<=count;i++)
{
cin>>need>>server_time>>time_low>>time_uper;
if(need<=0)
{
cout<<"客户的需求必须大于0,请重新输入!"<<endl;
i--;
continue;
}
if(server_time<=0)
{
cout<<"客户的服务时间必须大于0,请重新输入!"<<endl;
i--;
continue;
}
if(time_uper<time_low)
{
cout<<"看仔细哦~~结束时间怎么能小于开始时间呢?"<<endl;
i--;
continue;
}
CClient cli(need,server_time,time_low,time_uper,0,i-1,(i+1)%(count+1));
client.push_back(cli);
}
cout<<"恭喜,成功了一半.现在要输入距离信息啦!输入规则如下:"<<endl;
cout<<"依次输入第i个客户到第j个客户的距离,注意i<j,且要从i=1顺次输入,不得跳着输入."<<endl;
//为距离信息分配空间
int tco=(count+1)*count/2;
distance_data=new double[tco];
for (i=0;i<tco;i++)
{
UINT I,J;
int k=2*count+1;
I=(k-sqrt(k*k-8*i))/2;
J=i-(k-I)*I/2+I+1;
cin>>distance_data[i];
}
cout<<"最后阶段了,有点耐心啊"<<endl;
cout<<"输入倒计时:4!请输入汽车容量"<<endl;
cin>>capacity;
cout<<"输入倒计时:3!请输入汽车速度"<<endl;
cin>>speed;
cout<<"输入倒计时:2!请输入最高温度:";
cin>>temperature;
cout<<endl;
cout<<"输入倒计时:1!请输入最低温度";
cin>>tau;
cout<<endl;
cout<<"哈哈!哈哈!大功告成了,等着Copy结果吧~~"<<endl;
CVPR vpr(temperature,tau,
speed, //汽车速度
capacity, //汽车容量
count, //客户数
client, //客户需求信息
distance_data //客户距离信
);
cout<<"您输入的客户信息为:"<<endl;
cout<<"客户 "<<"需求 "<<"服务时间 "<<" 时间窗 "
<<" 新的开始时间 "<<" 前一个客户 "<<"后一个客户"<<endl;
for (i=0;i<=count;i++)
{
cout<<i<<setw(8)<<vpr.m_Client[i].GetNeed()<<setw(8)<<vpr.m_Client[i].GetServerTime()<<setw(10)<<"["
<<vpr.m_Client[i].GetTime_low()<<setw(4)<<vpr.m_Client[i].GetTime_uper()<<"]"<<setw(12)
<<vpr.m_Client[i].GetTime_new()<<setw(14)
<<vpr.m_Client[i].GetPrevious()<<setw(12)<<vpr.m_Client[i].GetNext()<<endl;
}
cout<<"现在输出距离信息"<<endl;
for (i=0;i<=count;i++)
{ cout<<setw(3);
for (int j=0;j<=count;j++)
{
cout<<vpr.CalD(i,j)<<setw(8);
}
cout<<endl;
}
if(!vpr.SimulatedAnnealing(0.5,20,31))cout<<"此问题没有解,请检查!!!"<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -