?? airport.cpp
字號(hào):
if((t_real<0) && (t_plan<(t+1)))
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
flightDep[j].Set_Flight_Delay();
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
}
/* if(!full)
{ //盡量使該時(shí)間段的出發(fā)航班數(shù)達(dá)到該時(shí)間段的出發(fā)容量
j=0;
do
{
t_real=flightDep[j].Get_Flight_Real();
t_plan=flightDep[j].Get_Flight_Plan();
if((t_real<0)&&(t_plan=(t+2)))
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightDep[j].Set_Flight_Delay();
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
} */
}
}
void Airport::GetAirport_DepFlight(int t) //獲得機(jī)場(chǎng)在t時(shí)間段的出發(fā)航班
{
Flight ff;
vector<Flight>::iterator pos;
for(pos=Airport_DepFlight[t].begin();pos!=Airport_DepFlight[t].end();pos++)
{
ff=*pos;
cout<<ff.Get_Flight_Num()<<endl;
}
}
void Airport::CountDelay_Arr() //計(jì)算到達(dá)延誤時(shí)間段和航班數(shù)
{
Flight ff;
int k;
DelayTime_Arr=0;
DelayFlight_Arr=0;
for(int i=0;i<flight_ArrNumber;i++)
{
ff=flightArr[i];
/* k=ff.Count_FlightDelay();
DelayTime_Arr+=k; */
if(ff.Get_Flight_Delay()>0)
{
k=ff.Get_Flight_Real()-ff.Get_Flight_Plan();
DelayTime_Arr+=k;
DelayFlight_Arr++;
}
else
if(ff.Get_Flight_Real()<0)
{
k=(T+1)-ff.Get_Flight_Plan();
DelayTime_Arr+=k;
DelayFlight_Arr++;
}
}
}
void Airport::CountDelay_Dep() //計(jì)算出發(fā)延誤時(shí)間段和航班數(shù)
{
Flight ff;
int k;
DelayTime_Dep=0;
DelayFlight_Dep=0;
for(int i=0;i<flight_DepNumber;i++)
{
ff=flightDep[i];
/* k=ff.Count_FlightDelay();
DelayTime_Dep+=k; */
if(ff.Get_Flight_Delay()>0)
{
k=ff.Get_Flight_Real()-ff.Get_Flight_Plan();
DelayTime_Dep+=k;
DelayFlight_Dep++;
}
else
if(ff.Get_Flight_Real()<0)
{
k=(T+1)-ff.Get_Flight_Plan();
DelayTime_Dep+=k;
DelayFlight_Dep++;
}
}
}
void Airport::CountDelay() //計(jì)算總的延誤時(shí)間段數(shù)和航班數(shù)
{
DelayTime=(DelayTime_Arr*2)+DelayTime_Dep;
DelayFlight=DelayFlight_Arr+DelayFlight_Dep;
}
/*void Airport::CountDelayFlight_Arr() //計(jì)算到達(dá)延誤航班數(shù)
{
Flight ff;
DelayFlight_Arr=0;
for(int i=0;i<flight_ArrNumber;i++)
{
ff=flightArr[i];
if(ff.Get_Flight_Delay()>0)
DelayFlight_Arr++;
else
if(ff.Get_Flight_Real()<0)
DelayFlight_Arr++;
}
}
void Airport::CountDelayFlight_Dep() //計(jì)算出發(fā)延誤航班數(shù)
{
Flight ff;
DelayFlight_Dep=0;
for(int i=0;i<flight_DepNumber;i++)
{
ff=flightDep[i];
if(ff.Get_Flight_Delay()>0)
DelayFlight_Dep++;
else
if(ff.Get_Flight_Real()<0)
DelayFlight_Dep++;
}
}*/
void Airport::Reverse_flightArr(int startIndex, int stopIndex) //改變到達(dá)航班容器中航班的位置
{
Flight ff;
if(startIndex >= stopIndex || startIndex >= flight_ArrNumber || stopIndex < 0)
return ;
for(; startIndex < stopIndex; stopIndex--)
{
ff=flightArr[startIndex];
flightArr[startIndex]=flightArr[stopIndex];
flightArr[stopIndex]=ff;
startIndex++;
}
}
void Airport::Reverse_flightDep(int startIndex, int stopIndex) //改變出發(fā)航班容器中航班的位置
{
Flight ff;
if(startIndex >= stopIndex || startIndex >= flight_DepNumber || stopIndex < 0)
return ;
for(; startIndex < stopIndex; stopIndex--)
{
ff=flightDep[startIndex];
flightDep[startIndex]=flightDep[stopIndex];
flightDep[stopIndex]=ff;
startIndex++;
}
}
void Airport::do2Opt() //優(yōu)化到達(dá)航班,通過(guò)換位使航班總的延誤時(shí)間段減小
{
bool done = false;
int counts,t1,t2,t3,t4;
Flight tmp;
if(optDone)
return;
counts=flight_ArrNumber;
for(int k = 0; (k < counts) && (! done); k++)
{
done = true;
for(int i = 0; i < counts; i++)
{
for(int j = i + 2; j < counts; j++)
{
//if((Distance(Path[i],Path[(i + 1) % counts])+ Distance(Path[j],Path[(j + 1) % counts])) > (Distance(Path[i],Path[j]) + Distance(Path[(i + 1) % counts],Path[(j + 1) % counts])))
t1=flightArr[i].Count_FlightDelay()+flightArr[(i + 1) % counts].Count_FlightDelay();
t2=flightArr[j].Count_FlightDelay()+flightArr[(j + 1) % counts].Count_FlightDelay();
t3=flightArr[i].Count_FlightDelay()+flightArr[j].Count_FlightDelay();
t4=flightArr[(i + 1) % counts].Count_FlightDelay()+flightArr[(j + 1) % counts].Count_FlightDelay();
if((t1+t2)>(t3+t4))
{
tmp=flightArr[(i + 1) % counts];
flightArr[(i + 1) % counts]=flightArr[j];
flightArr[j]=tmp;
Reverse_flightArr(i + 2, j - 1);
//Reverse_flightDep(i + 2, j - 1);
done = false;
}
}
}
}
optDone = true;
}
void Airport::Set_FCFSArrFlight() //先來(lái)先服務(wù)算法設(shè)置機(jī)場(chǎng)在各個(gè)時(shí)間段的到達(dá)航班
{
int num,j,t_plan,t_real,t_delay;
bool full;
for(int t=0;t<T;t++)
Airport_ArrFlight[t].erase(Airport_ArrFlight[t].begin(),Airport_ArrFlight[t].end());
for(t=0;t<T;t++) //各時(shí)間段
{
num=0; j=0; full=false;
//使到達(dá)航班放入合適的到達(dá)航班容器中
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
t_delay=flightArr[j].Get_Flight_DelayTime();
if((t_plan<(t+1)) && (t_real<0)) //先來(lái)先服務(wù)算法
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightArr[j].Set_Flight_Delay();
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
if(!full)
{
j=0;
do
{
t_plan=flightArr[j].Get_Flight_Plan();
t_real=flightArr[j].Get_Flight_Real();
//t_delay=flightArr[j].Get_Flight_DelayTime();
if((t_real<0)&&(t_plan==(t+1)))
{
Airport_ArrFlight[t].push_back(flightArr[j]);
flightArr[j].Set_Flight_Real(t+1);
num++;
if(num==Airport_Arr[t])
full=true;
}
j++;
}while((j<flight_ArrNumber)&&(!full));
}
/* if(!full) //使到達(dá)和出發(fā)相關(guān)
{
SetAirport_Arr(t,num); //設(shè)置t時(shí)間段的到達(dá)容量
SetAirport_Dep(t); //設(shè)置t時(shí)間段的出發(fā)容量
} */
}
}
void Airport::Set_FCFSDepFlight() //先來(lái)先服務(wù)算法設(shè)置機(jī)場(chǎng)在各個(gè)時(shí)間段的出發(fā)航班
{
int num,j,t_plan,t_real,t_delay;
bool full;
for(int t=0;t<T;t++)
Airport_DepFlight[t].erase(Airport_DepFlight[t].begin(),Airport_DepFlight[t].end());
for(t=0;t<T;t++) //各時(shí)間段
{
num=0; j=0; full=false;
//使出發(fā)航班放入合適的出發(fā)航班容器中
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
t_delay=flightDep[j].Get_Flight_DelayTime();
if((t_plan<(t+1)) && (t_real<0)) //先來(lái)先服務(wù)算法
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightDep[j].Set_Flight_Delay();
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
if(!full)
{
j=0;
do
{
t_plan=flightDep[j].Get_Flight_Plan();
t_real=flightDep[j].Get_Flight_Real();
if((t_real<0)&&(t_plan==(t+1)))
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
}
/* if(!full)
{ //盡量使該時(shí)間段的出發(fā)航班數(shù)達(dá)到該時(shí)間段的出發(fā)容量
j=0;
do
{
t_real=flightDep[j].Get_Flight_Real();
t_plan=flightDep[j].Get_Flight_Plan();
if(t_real<0)
{
Airport_DepFlight[t].push_back(flightDep[j]);
flightDep[j].Set_Flight_Real(t+1);
if(t_plan<(t+1))
flightDep[j].Set_Flight_Delay();
num++;
if(num==Airport_Dep[t])
full=true;
}
j++;
}while((j<flight_DepNumber)&&(!full));
} */
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -