Я работаю над поиском оптимального пути между двумя состояниями заряда для электромобиля c. У меня есть функция, которая строит все возможные пути из начального состояния заряда, учитывая, что он может либо заряжать, разряжать, либо ничего не делать, как показано на рисунке ниже.
Функция работает и выдает правильные пути, но я хочу исключить пути, которые не могли привести к окончательному состоянию заряда. Я пытался использовать оператор if, но некоторые пути не исключаются, что должно быть. Любая помощь в том, где я ошибаюсь с логикой c, была бы очень полезна, спасибо !!
import pandas as pd
import numpy as np
import scipy as sp
import gurobipy as gpy
import matplotlib.pyplot as plt
%matplotlib inline
pd.set_option('display.max_rows', 500)
#SOCs need to be converted to float numbers
#Initial SOC
iSOC=float(50)
#Target SOC
tSOC=float(56)
step1=2
step=5
def myFunction(base, plus):
# variable to hold the number of steps left
# variable needs to be one greater than step because length of bas starts at 1, not 0
numOfStepsLeft = step + 1
#Initialize result array
result = []
#For Each tuple in entry
for bas in base:
#Get Last Element
lastElem = bas[-1:][0]
# if the absolute value of the terminal state of charge minus the last element
# in the row is greater the the number of steps left times the charge amount per step
if(abs(tSOC - lastElem)>((numOfStepsLeft-len(bas))*step1)):
print(base[-1])
# ##delete the row that contains the lastElem which satisifies above condition
del base[-1:][0]
# ##continue key word is used to skip inner for loop and go to next iteration of
# ##outer for loop
continue
#For Each element to add
for x in plus:
# Append a tuple composed of base + sum(lastElement & element to add)
result.append(bas + ( (lastElem+x),) )
# Return result
return result
df = [(iSOC,)]
for i in range(step):
# add = [step1,0,-step1]
df=myFunction(df, [step1,0,-step1])
#df1 is possible options to charge/discharge the battery with the defined step size in the given time
df1=pd.DataFrame(df)
print(df1)
Кроме того, любые идеи относительно лучшей стратегии сокращения числа путей были бы очень добро пожаловать. Спасибо !!