我正在使用Colab运行以下代码:
import numpy as np
import pandas as pd
MAP_locs = ["LOAD POINT 1","LOAD POINT 2","DELIVERY POINT"]
MAP_SIZE = len(MAP_locs)
LOAD_POINT_1 = []
LOAD_POINT_2 = []
DELIVERY_POINT = []
for i in range(10):
LOAD_POINT_1.append(0.5)
LOAD_POINT_2.append(0.5)
DELIVERY_POINT.append(-1)
d = {'LOAD POINT 1': LOAD_POINT_1,
'LOAD POINT 2': LOAD_POINT_2,
'DELIVERY POINT': DELIVERY_POINT}
df = pd.DataFrame(data=d)
VESSEL_Y = 6
VESSEL_X = [1,0,0]
VESSEL_X_to_df = MAP_locs[VESSEL_X.index(1)]
class VESSEL():
def __init__(self, x , y, cargo_capacity, cargo_on_board):
self.y = VESSEL_Y
self.x = VESSEL_X.index(1)
self.cargo_capacity = 1
self.cargo_on_board = 0
def load(self):
print("Loading")
cargo_to_load = 0
max_quantity_2load = self.cargo_capacity - self.cargo_on_board
cargo_on_location = df.at[VESSEL_Y,VESSEL_X_to_df]
if cargo_on_location <= 0 or max_quantity_2load == 0:
False
print("Load = False")
else:
True
print("Load = TRUE")
if cargo_on_location > max_quantity_2load:
cargo_to_load = max_quantity_2load
if cargo_on_location <= max_quantity_2load:
cargo_to_load = cargo_on_location
print("Max quantity 2 load: ",max_quantity_2load,'\n', "Cargo on loc: ",cargo_on_location,'\n', "Cargo on board: ",self.cargo_on_board,'\n', "Cargo to load: ",cargo_to_load)
df.at[VESSEL_Y,VESSEL_X_to_df] = df.at[VESSEL_Y,VESSEL_X_to_df] - cargo_to_load
self.cargo_on_board = self.cargo_on_board + cargo_to_load
cargo_on_location = df.at[VESSEL_Y,VESSEL_X_to_df]
cargo_to_load = 0
max_quantity_2load = self.cargo_capacity - self.cargo_on_board
print("Loaded")
print("Max quantity 2 load: ",max_quantity_2load,'\n', "Cargo on loc: ",cargo_on_location,'\n', "Cargo on board: ",self.cargo_on_board,'\n', "Cargo to load: ",cargo_to_load)
print('\n','\n')
def discharge(self):
print("cargo on board: ",self.cargo_on_board)
CT_capacity = df.at[VESSEL_Y,VESSEL_X_to_df]
if CT_capacity >= 0 or self.cargo_on_board == 0:
False
print("Discharge = False")
else:
True
print("Discharge = TRUE")
if -CT_capacity > self.cargo_on_board:
cargo_to_discharge = self.cargo_on_board
if -CT_capacity <= self.cargo_on_board:
cargo_to_discharge = -CT_capacity
print("cargo_to_discharge 2: ",cargo_to_discharge)
print("PD value1:",df.at[VESSEL_Y,VESSEL_X_to_df])
CT_remaining_capacity = df.at[VESSEL_Y,VESSEL_X_to_df]+cargo_to_discharge
print("CT remaining capacity",CT_remaining_capacity)
df.at[VESSEL_Y,VESSEL_X_to_df] = CT_remaining_capacity
print("here is a problem. it should be -0.5 dunno why is zero:",df.at[VESSEL_Y,VESSEL_X_to_df])
self.cargo_on_board = self.cargo_on_board - cargo_to_discharge
CT_capacity = df.at[VESSEL_Y,VESSEL_X_to_df]
if -CT_capacity > self.cargo_on_board:
cargo_to_discharge = self.cargo_on_board
if -CT_capacity <= self.cargo_on_board:
cargo_to_discharge = -CT_capacity
print("Discharged")
print("CT_capacity: ",CT_capacity,'\n', "cargo_to_discharge: ",cargo_to_discharge,'\n', "Cargo on board: ",self.cargo_on_board, '\n', "PD value:",df.at[VESSEL_Y,VESSEL_X_to_df])
print('\n','\n')
print("Vessel gonna act")
print("Vessel loc: ", VESSEL_X_to_df)
VESSEL_1 = VESSEL(x=VESSEL_X,y=VESSEL_Y,cargo_capacity=1, cargo_on_board=0)
VESSEL_1.load()
VESSEL_X = [0,0,1]
VESSEL_X_to_df = MAP_locs[VESSEL_X.index(1)]
print("Vessel loc: ", VESSEL_X_to_df)
VESSEL_1.discharge()
想法是在某些位置进行船只装卸。装载和卸载的数量受容器容量和存储量的限制(装载范围从0到1,排出范围从0到2)。
我认为加载工作正常,但是当使用放电并且尝试更新DF信息(df.at [VESSEL_Y,VESSEL_X_to_df])时,该值变为零,并且我期望-0.5,即我期望获得PD值2为-0.5,而不是0.00。
出于某些原因,df.at在这里不起作用,我无法找到原因。我考虑过将其更改为loc或类似名称,但想了解为什么这不起作用。
感谢您的帮助。
问题是.at
试图保留数据类型,在这种情况下为整数。看到这个答案。当您更改数据类型时,它会按预期工作。我在行中添加了句点:
DELIVERY_POINT.append(-1.)
这使其成为浮点数。现在,您的代码将按预期运行。从链接的讨论中我的理解是.loc
不会出现此问题。也有可能使.loc
头发变慢,但是这种差异可以忽略不计。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句