Я строю модель планирования авиаперевозок, используя алгоритмы c, которые генерируют расписание полетов на ежедневной основе и также назначают правильный самолет. Каждая хромосома представляет в общей сложности 50 полетов в день (включая обратную поездку, что означает 100 рейсов в день), и у меня есть 42 участка, поэтому, очевидно, будут повторные этапы полета. Начальные члены создаются случайным образом, и существуют некоторые ограничения, которые должны быть выполнены, чтобы иметь действительное расписание. Проблема состоит в том, что все ограничения полета должны быть включены, но модель всегда не может этого достичь !! Он начинается с пропадания примерно в 9 или 10 пунктов назначения, а затем уменьшается, используя мутацию крипа, пока не достигнет 1, не застрянет в нем и никогда его не найдет! Даже когда он работает на 1000 поколений! Я пытался вмешаться в первоначальный член и включить их все до начала, но это тоже не работает! так в чем дело ?! как я мог решить это?
Фитнес-код показан ниже, он все еще находится в стадии модификации, поэтому извините, если он выглядит немного тупым
def fitness (df, df2, member):
fit = []
c1, c2, c3, c4, c5 = 0, 0, 0, 0, 0
fitgene = []
for i in range (0,len(df2.index)):
df2.loc[i, ['Duration']] = 0
for i in range (0, len(member)-1):
#Range of aircraft
acindex = df2[df2['NO']== member[i][4]].index.item()
acrange = df2['Range'].iloc[acindex]
findex = df[df['NO']== member[i][0]].index.item()
distance = df['Distance'].iloc[findex]
if acrange < distance:
c1 += 1
#Duration of aircraft
acspeed = df2['Speed'].iloc[acindex]
time = (distance/acspeed) * 2
if time < 11:
df2.loc[acindex, ['Duration']] += time
for j in range (i+1, len(member)):
#same flight at the same time
if member[i][0] == member [j][0]:
if member[i][2] == member [j][2]:
c2 += 1
#same aircraft in flight
if member[i][4] == member [j][4]:
acindex = df2[df2['NO']== member[i][4]].index.item()
findex = df[df['NO']== member[i][0]].index.item()
distance = df['Distance'].iloc[findex]
acspeed = df2['Speed'].iloc[acindex]
hour = int(distance/acspeed*2)
minute = round(((distance/acspeed*2)-hour) * 60)
#turnaroud time
trt= df2['TRT'].iloc[acindex]*2
hour = hour + member[i][2]
minute = minute + trt + member[i][3]
if minute >= 60 :
while(minute >= 60):
if minute == 60:
minute=0
elif minute > 60:
minute = minute - 60
hour = hour + 1
start1 = (convert([member[i][2], member[i][3]]))
end1 = (convert([hour, int(minute)]))
hour, minute = 0, 0
acindex = df2[df2['NO']== member[j][4]].index.item()
findex = df[df['NO']== member[j][0]].index.item()
distance = df['Distance'].iloc[findex]
acspeed = df2['Speed'].iloc[acindex]
hour = int(distance/acspeed*2)
minute = round(((distance/acspeed*2)-hour) * 60)
#turnaroud time
trt= df2['TRT'].iloc[acindex]*2
hour = hour + member[j][2]
minute = minute + trt + member[j][3]
if minute >= 60 :
while(minute >= 60):
if minute == 60:
minute=0
elif minute > 60:
minute = minute - 60
hour = hour + 1
start2 = (convert([member[j][2], member[j][3]]))
end2 = (convert([hour, int(minute)]))
if (start1 <= start2 and start2 <= end1) or (start1 <= end2 and end2 <= end1) or (start2 <= start1 and start1 <= end2) or (start2 <= end1 and end1 <= end2):
c3 += 1
#all flights present in schedule
for i in range(0,len(df.index)):
flight = df['NO'].iloc[i]
test = 0
for j in range(0,len(member)):
if flight == member[j][0]:
test = 1
if test == 0:
c4 +=1
#duration
for i in range (0,len(df2.index)):
dur = df2['Duration'].iloc[i]
if dur > 11:
c5+=1
fit.append(c1)
fit.append(c2)
fit.append(c3)
fit.append(c4)
fit.append(c5)
fits = c1+c2+c3+c4+c5
return fits,fit