Это репост, потому что я получаю странные результаты. Я пытаюсь запустить цикл моделирования для ячеек, которые изменяются в коде сотового автомата, который изменяет коды землепользования на основе их соседних соседей. Я импортирую текстовые файлы, которые создают идентификатор ячейки ключ = значение кода землепользования. Я также импортирую текстовый файл с соседними соседями каждой ячейки. В первый раз, когда я запустил код, 7509 ячеек изменили землепользование в зависимости от использования земли соседними соседями. Я могу закомментировать чтение текстового файла словаря и запустить его снова, затем изменилось около 5000 ячеек. Запустите его снова, затем еще меньше и так далее. То, что я хотел бы сделать, это запустить это в цикле, пока только 0,0001 от общего числа ячеек не изменится, после этого разорвать цикл.
Я пробовал цикл времени, но он не дает мне результатов, которые я ищу. После первого запуска счет верен на уровне 7509. После этого счет снова равен 28 476. Я не понимаю, почему это происходит, потому что счет должен вернуться к нулю. Может кто-нибудь сказать мне, что я делаю не так? Вот код:
import sys, string, csv
#Creating a dictionary of FID: LU_Codes from external txt file
text_file = open("H:\SWAT\NC\FID_Whole_Copy.txt", "rb")
#Lines = text_file.readlines()
FID_GC_dict = dict()
reader = csv.reader(text_file, delimiter='\t')
for line in reader:
FID_GC_dict[line[0]] = int(line[1])
text_file.close()
#Importing neighbor list file for each FID value
Neighbors_file = open("H:\SWAT\NC\Pro_NL_Copy.txt","rb")
Entries = Neighbors_file.readlines()
Neighbors_file.close()
Neighbors_List = map(string.split, Entries)
#print Neighbors_List
#creates a list of the current FID
FID = [x[0] for x in Neighbors_List]
gridList = []
for nlist in Neighbors_List:
row = []
for item in nlist:
row.append(FID_GC_dict[item])
gridList.append(row)
#print gridList
#Calculate when to end of one sweep
tot_cells = len(FID)
end_sim = tot_cells
p = 0.0001
#Performs cellular automata rules on land use grid codes
while (end_sim > tot_cells*p):
i = iter(FID)
count = 0
for glist in gridList:
Cur_FID = i.next()
Cur_GC = glist[0]
glist.sort()
lr_Value = glist[-1]
if lr_Value < 6:
tie_LR = glist.count(lr_Value)
if tie_LR >= 4 and lr_Value > Cur_GC:
FID_GC_dict[Cur_FID] = lr_Value
#print "The updated gridcode for FID ", Cur_FID, "is ", FID_GC_dict[Cur_FID]
count += 1
end_sim = count
print end_sim
Спасибо за любую помощь .... еще раз! (