DpythonProject3会员信息附件二:会员信息数据xlsx其中文件中‘商品GPS纬度’和‘商品GPS经度’两列的数据组成商品的位置信息‘会员GPS纬度’和‘会员GPS经度’两列数据组成会员的位置信息跟聚位置信息算出距离r且只保留距离小于01的r文件中‘预订任务限额’是每个会员对应的任务限额文件中‘任务标价’那列的数据代表商品的价格文件中‘任务执行情况’一列的数据分为0和1当任务执行情况为0
import pandas as pd import numpy as np from scipy.optimize import minimize
读取数据文件
data = pd.read_excel("D:\pythonProject3\会员信息\附件二:会员信息数据.xlsx")
提取所需列数据
product_lat = data['商品GPS纬度'] product_lon = data['商品GPS经度'] member_lat = data['会员GPS纬度'] member_lon = data['会员GPS经度'] task_limit = data['预订任务限额'] price = data['任务标价'] task_status = data['任务执行情况']
计算距离函数
def calculate_distance(lat1, lon1, lat2, lon2): R = 6371 # 地球半径,单位为千米 lat1_rad = np.radians(lat1) lon1_rad = np.radians(lon1) lat2_rad = np.radians(lat2) lon2_rad = np.radians(lon2) dlon = lon2_rad - lon1_rad dlat = lat2_rad - lat1_rad a = np.sin(dlat / 2) ** 2 + np.cos(lat1_rad) * np.cos(lat2_rad) * np.sin(dlon / 2) ** 2 c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a)) distance = R * c return distance
定义引力子函数
def gravity_function(params): k, m, n = params[0], params[1], params[2] y = k * price * (task_limit ** m) / (distance ** n) return y
定义目标函数
def objective_function(params): y_success = gravity_function(params)[task_status == 1] y_failure = gravity_function(params)[task_status == 0] min_y_success = np.min(y_success) max_y_failure = np.max(y_failure) return max_y_failure - min_y_success
定义约束条件
def constraint(params): return distance - 0.1
定义初始参数值
initial_params = [1, 1, 1]
优化求解最小引力子
result = minimize(objective_function, initial_params, constraints={'type': 'ineq', 'fun': constraint})
输出结果
k_optimal = result.x[0] m_optimal = result.x[1] n_optimal = result.x[2] min_y_success = np.min(gravity_function(result.x)[task_status == 1])
print("最小引力子公式:y = {} * q1 * (q2 ^ {}) / (r ^ {})".format(k_optimal, m_optimal, n_optimal)) print("成功的最小引力子:", min_y_success)
原文地址: https://www.cveoy.top/t/topic/ixN4 著作权归作者所有。请勿转载和采集!