Я пытаюсь использовать функцию, которая определяет расстояние между двумя координатами в моей модели gurobi.Функция использует формулу Haversine для определения расстояний между координатами.Цель моей модели gurobi - найти координаты x и y, которые минимизируют расстояние между парой координат.Проблема, с которой я сталкиваюсь, заключается в том, что функция расстояния не принимает выражения GRB.
Код, который я использую, выглядит следующим образом
from gurobipy import Model, GRB
from math import cos
def distance(lat1, lon1, lat2, lon2):
p = 0.017453292519943295 #Pi/180
a = (0.5 - cos((lat2 - lat1) * p)/2 +
cos(lat1 * p) * cos(lat2 * p) * (1 - cos((lon2 - lon1) * p))
/ 2)
return 12742 * asin(sqrt(a))
# example customer location coordinates
cuslat = [55.43, 55.57, 55.38]
cuslon = [9.84, 9.95, 9.85]
# create Model
m = Model('lat lon that min distance')
# create variables
lat = m.addVar(vtype = GRB.CONTINUOUS, name = 'lat')
lon = m.addVar(vtype = GRB.CONTINUOUS, name = 'lon')
# set Objective
m.setObjective(distance(lat,lon,cuslat[0],cuslon[0]),GRB.MINIMIZE)
# set constraints
m.optimize()
, и ошибка, которую я получаю при запуске этого кода:
Traceback (most recent call last):
File "runme.py", line 24, in <module>
m.setObjective(distance(lat,lon,cuslat[0],cuslon[0]),GRB.MINIMIZE)
File "runme.py", line 6, in distance
a = (0.5 - cos((lat2 - lat1) * p)/2 +
TypeError: must be real number, not gurobipy.LinExpr
PS.Я новичок в публикации вопроса на Stackoverflow, поэтому надеюсь, что сформулировал свой вопрос достаточно четко