DpythonProject3会员信息附件二:会员信息数据xlsx其中文件中‘商品GPS纬度’和‘商品GPS经度’两列的数据组成商品的位置信息‘会员GPS纬度’和‘会员GPS经度’两列数据组成会员的位置信息根据位置信息算出距离r且只保留距离r小于01的数据文件中‘预订任务限额’是每个会员对应的任务限额文件中‘任务标价’那列的数据代表商品的价格文件中‘任务执行情况’一列的数据分为0和1当任务执行情况
import pandas as pd import math import numpy as np from scipy.optimize import minimize
读取数据
data = pd.read_excel(r'D:\pythonProject3\会员信息\附件二:会员信息数据.xlsx')
计算距离函数
def calculate_distance(lat1, lon1, lat2, lon2): R = 6371 # 地球半径,单位为公里
# 将经纬度转换为弧度
lat1 = math.radians(lat1)
lon1 = math.radians(lon1)
lat2 = math.radians(lat2)
lon2 = math.radians(lon2)
dlon = lon2 - lon1
dlat = lat2 - lat1
a = math.sin(dlat / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
distance = R * c
return distance
计算引力子函数
def calculate_gravitational_force(q1, q2, r, k, m, n): return (k * q1 * (q2 ** m)) / (r ** n)
定义目标函数
def objective(x): k, m, n = x y_values = [] for i in range(len(data)): if data.loc[i, '任务执行情况'] == 1: q1 = data.loc[i, '任务标价'] q2 = data.loc[i, '预订任务限额'] lat1 = data.loc[i, '商品GPS纬度'] lon1 = data.loc[i, '商品GPS经度'] lat2 = data.loc[i, '会员GPS纬度'] lon2 = data.loc[i, '会员GPS经度'] r = calculate_distance(lat1, lon1, lat2, lon2) y = calculate_gravitational_force(q1, q2, r, k, m, n) y_values.append(y) min_y = min(y_values) return -min_y
定义约束条件
def constraint(x): k, m, n = x return k, m, n
设置初始值
x0 = [1, 1, 1]
优化求解
bounds = [(0, None), (0, None), (0, None)] constraints = [{'type': 'eq', 'fun': constraint}] result = minimize(objective, x0, bounds=bounds, constraints=constraints)
输出结果
k, m, n = result.x y_min = -result.fun print("最小引力子y的公式为: y = ({} * q1 * (q2^{}) / (r^{}))".format(k, m, n)) print("成功的最小引力子为:", y_min)
原文地址: https://www.cveoy.top/t/topic/ixOh 著作权归作者所有。请勿转载和采集!