2017年国赛高教杯数学建模B题拍照赚钱的任务定价解题全过程文档及程序

2017年国赛高教杯数学建模

B题 拍照赚钱的任务定价

  “拍照赚钱”是移动互联网下的一种自助式服务模式。用户下载APP,注册成为APP的会员,然后从APP上领取需要拍照的任务(比如上超市去检查某种商品的上架情况),赚取APP对任务所标定的酬金。这种基于移动互联网的自助式劳务众包平台,为企业提供各种商业检查和信息搜集,相比传统的市场调查方式可以大大节省调查成本,而且有效地保证了调查数据真实性,缩短了调查的周期。因此APP成为该平台运行的核心,而APP中的任务定价又是其核心要素。如果定价不合理,有的任务就会无人问津,而导致商品检查的失败。
  附件一是一个已结束项目的任务数据,包含了每个任务的位置、定价和完成情况(“1”表示完成,“0”表示未完成);附件二是会员信息数据,包含了会员的位置、信誉值、参考其信誉给出的任务开始预订时间和预订限额,原则上会员信誉越高,越优先开始挑选任务,其配额也就越大(任务分配时实际上是根据预订限额所占比例进行配发);附件三是一个新的检查项目任务数据,只有任务的位置信息。请完成下面的问题:
  1. 研究附件一中项目的任务定价规律,分析任务未完成的原因。
  2. 为附件一中的项目设计新的任务定价方案,并和原方案进行比较。
  3. 实际情况下,多个任务可能因为位置比较集中,导致用户会争相选择,一种考虑是将这些任务联合在一起打包发布。在这种考虑下,如何修改前面的定价模型,对最终的任务完成情况又有什么影响?
  4. 对附件三中的新项目给出你的任务定价方案,并评价该方案的实施效果。

  附件一:已结束项目任务数据
  附件二:会员信息数据
  附件三:新项目任务数据

整体求解过程概述(摘要)

  在“拍照赚钱”的新自助式服务模式下,用户可领取app上的任务,成功执行便可赚取标定的酬金。在这种模式下,如何合理定价从而获取最高收益成为了系统运营的核心。本文针对题中所给的数据信息进行数据挖掘,设计了一套较为合理的定价及任务打包算法。
  问题一中,我们首先猜测了可能影响任务定价的因素,包括:任务周围的用户限额总量、任务周围的用户密度、任务的离群程度等。我们量化以上可能的影响因素,并以该因素为自变量以定价为因变量回归分析,通过拟合度来判断该因素是否对定价有决定作用。我们随机抽取70%的数据进行回归训练,结果表明,任务的定价与周围用户的限额总量、周围用户的平均距离、自身的离群程度关系密切。利用剩余的30%数据分别对以上回归方程进行检验,用均方残差偏移程度来评价方程的可靠性。根据三个因素,对于成功执行的任务与未成功执行的任务分别进行回归分析,并对比其回归函数图像,发现任务未完成的主要原因是用户没考虑自身限额对定价的影响,其余两个因素相对次要。
  问题二中,我们建立了多目标优化模型,其中目标函数为总定价和成功率。对问题一中的完成与未完成的任务,我们可以分别拟合出其定价曲面,位于这两个曲面之间的区间即为合理定价区间。除了问题一中三个因素外,任务成功率还受到周围用户的信誉、预订任务时间等变量的影响。根据已有的数据回归分析,得到成功率的综合评价函数。基于合理定价区间的约束,我们分别对定价最优方案与成功率最优方案进行求解,经过我们的算法优化之后,与原方案相比,我们可以在同样的平均成功率的前提下将定价总额降低2.9%;我们也可以用同样的定价总额将平均成功率提高9.4%。
  问题三中,我们建立基于改进的DBSCAN算法的打包方案。确定打包的核心目的是改善预期成功率较小任务的执行情况。我们引入了任务的得分半径和用户得分半径两个参数对原算法中的固定半径进行改进。任务的预期成功率越小,任务得分半径越大,用户的信誉度越高、预订任务时间越早,用户得分半径越大。打包后我们还基于用户得分半径检验打包是否合理,即是否有用户能够执行该任务。基于该算法,我们一共求得62个需要被打包的任务点,被打包成25组。将预期成功率与原成功率进行对比,成功率最高提升了7.2%,平均成功率提升2.3%,验证了任务联合打包对于平均成功率的提升有很大作用。在确定新的定价模型时,我们将定价划分为两大因素:任务本身价值与路途花费。根据原数据对这两个因素的系数进行求解,我们基于该定价函数对定价进行修改,得到了新的定价方案。
  问题四中,我们根据优化模型以及打包算法对新数据进行定价、打包、成功率计算,并得到优化的定价和打包方案并得到相应的优化方案成功率。为了检验模型的可靠性,我们建立了仿真模拟模型,对每个用户行为进行仿真,结果显示模拟成功率与优化方案成功率偏差在20%以内。 最后我们对模型的鲁棒性和灵敏度进行了检验,发现模型具有较好的鲁棒性。

模型假设:

  1. 假设会员到所有任务点的出行便利程度一致,到达任务点所用时间随距离增加而增加,且该距离为直线距离;
  2. 不考虑天气等原因对会员出行的影响;
  3. 所有任务的难度相同,即不考虑任务难度对会员选择造成的影响;
  4. 每个任务至多由一个人完成,不考虑多人合作完成一个任务的情况。

问题分析:

  问题一分析
  问题一要求我们探索定价规律及研究任务未完成的原因。从系统角度出发考虑每个任务的定价有两个方向:任务与用户的关系、任务与任务的关系。从这两个角度考虑,我们可以进一步分析任务与用户的关系主要有任务周围用户数量,任务周围用户密度等;任务与任务之间的关系主要为任务的离群程度。 我们可以对以上因素量化,并分别将定价与以上因素进行函数拟合,利用拟合度判断定价是否与以上因素有关。接着根据有关的因素对完成的任务与未完成的任务分别进行分析,判断任务未完成的具体原因。
  问题二分析
  问题二要求我们设计新的任务定价方案,并和原方案进行比较。这是一个博弈问题的优化,博弈双方是定价与成功率。我们的目标是成功率尽可能高,定价尽可能低。成功率除了与定价有关,还与问题一中的若干影响因素有关。我们可以回归分析得到成功率关于以上因素的函数关系。 接下去可以建立优化模型并求解。根据给出的数据集,我们寻找成功执行的任务定价与未成功执行任务的定价之间的差距,并寻找合理的定价区间。以该区间为约束,分别就成功率最高及定价总和最低为目标,将其划分为两个优化模型并求解能得出总定价固定的情况下成功率最高的定价方案以及成功率固定总定价最低的定价方案。得出方案后可以就成功率与定价与原方案进行对比来判断新
定价获得的效果。
  问题三分析
  问题三要求考虑多任务打包发布,修改定价并分析对任务完成情况的影响。由于本题任务点分布不均匀,我们考虑对DBSCAN算法进行改进:算法的半径改为得分半径,成功率高的点得分高,成功率低的点得分低。为了提高成功率,我们将成功率低的点与成功率高的点打包。打包后还需要分析打包的合理性,即打包任务周边会员的信誉、限额等因素,如果合理就保留该包,不合理就打散该包。
  关于打包任务的定价,在本问题中我们将定价分为两部分:任务本身价值、路途花费。即任务打包后任务的本身价值不变,但由于路途花费(包括时间、交通费用)减少,在系统定价时打包的任务总价低于原定价总和。根据原数据找到任务本身价值、路途划分、总定价三者的关系,再根据问题二得到的优化模型进行最优定价搜寻,最终可以对比打包前后成功率的变化情况来体现打包的效果。
  问题四分析
  问题四给出了一个新项目,要求给出我们的定价方案及评估方案实施效果。 将数据代入问题二得到的定价模型以及问题三得到的打包模型进行求解,输出每个任务定价与成功率数据,并对结果进行分析。

模型的建立与求解整体论文缩略图

在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

%第一问中任务分布完成情况分布图
unfinish=xlsread('附件一:未完成的任务数据.xls');
finish=xlsread('附件一:已经完成的任务数据.xls');
Ax=unfinish(:,2);
Ay=unfinish(:,3);
Bx=finish(:,2);
By=finish(:,3);
price=finish(:,3);
scatter(Ay,Ax);
hold on
scatter(By,Bx);
AVG=mean(finish(:,4));
Ascending=sortrows(finish,4); %按标价升序排序
for i=1:15
Ascending(i,:)=[];
end
[row,col]=size(Ascending);
for i=1:15
Ascending(row-i,:)=[];
end
[row2,col2]=size(Ascending);
AVG2=mean(Ascending(:,4));  %聚点
%%  问题一所有图片代码
infor1 = xlsread('附件一:已结束项目任务数据.xls');
row = size(infor1, 1); 
infor1_1 = zeros(0, 4);
infor1_0 = zeros(0, 4);
for i = 1 : rowif infor1(i, 4)ix = size(infor1_1, 1);infor1_1(ix + 1, :) = infor1(i, :);elseix = size(infor1_0, 1);infor1_0(ix + 1, :) = infor1(i, :);end
end
figure;
hold on;
scatter3(infor1_1(:, 2), infor1_1(:, 1), infor1_1(:, 3), 100, 'o', 'blue');
scatter3(infor1_0(:, 2), infor1_0(:, 1), infor1_0(:, 3), 100, 'o', 'red');
xlabel('经度');ylabel('纬度');
s1 = zeros(0, 2); f0 = zeros(0, 2);
sigma = 0.05;
for i = 1 : rowaat = infor1(i, 1);nnt = infor1(i, 2);density = 0;for i2 = 1 : rowaat2 = infor1(i2, 1);nnt2 = infor1(i2, 2);dist = sqrt((aat - aat2) ^ 2 + (nnt - nnt2) ^ 2); %求距离公式density = density + normpdf(dist, 0, sigma); %正态概率密度函数在dist处的值end% density = log(density);price = infor1(i, 3);if (infor1(i, 4))ix = size(s1, 1);s1(ix + 1, 1) = density;s1(ix + 1, 2) = price;elseix = size(f0, 1);f0(ix + 1, 1) = density;f0(ix + 1, 2) = price;endinfor1(i, 5) = density;
end
figure;
hold on;
scatter(s1(:, 1), s1(:, 2));
scatter(f0(:, 1), f0(:, 2), 'x');
xlabel('任务密度');
ylabel('价格');
da = fitcdiscr(infor1(:, [1, 2, 3, 5]), infor1(:, 4), 'DiscrimType','quadratic');
daClass = resubPredict(da);
Err = resubLoss(da);
fprintf('loss: %f\n', Err);
bad1 = ~ (daClass == infor1(:, 4));
figure;
hold on;
gscatter(infor1(:, 2), infor1(:, 1), infor1(:, 4), 'rg', 'osd');
plot(infor1(bad1, 2), infor1(bad1, 1), 'kx');
ylabel('纬度');
xlabel('经度');
figure;
[x, y] = meshgrid(min(infor1(:, 1)) : 0.05 : max(infor1(:, 1)), min(infor1(:, 2)) : 0.05 : max(infor1(:, 2)));
x = x(:);y = y(:);
j = da.predict([x, y, x * 0 + 67, x * 0 + 100]);
gscatter(y, x, j, 'grb','sod');
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

http://www.ppmy.cn/news/1527754.html

相关文章

小程序组件间通信

文章目录 父传子子传父获取组件实例兄弟通信 父传子 知识点: 父组件如果需要向子组件传递指定属性的数据,在 WXML 中需要使用数据绑定的方式 与普通的 WXML 模板类似,使用数据绑定,这样就可以向子组件的属性传递动态数据。 父…

【iOS】dismiss多级的方法

前言 上次笔者总结过push和pop推入和推出界面的方法,这里对于dismiss多级的方法进行一个总结,推入推出方法可以看看笔者这篇博客:【iOS】UI学习——界面切换 dismiss推出多级的原理 当我们使用pop推入新的界面的时候,连续pop推…

Android13 Launcher3屏蔽桌面指示器

最近需求是要求隐藏桌面上的分页指示器(提示左右滑动 分页点或横线)看到Launcher3里面相关类是PageIndicator。没有找到该view设置隐藏,但是找到了一个新的方案 隐藏桌面圆点指示器Change-Id: I44fd51d3662247926d5550346b7b62b2e264086adiff…

把设计模式用起来!(3)用不好模式?之时机不对

上一篇:《把设计模式用起来(2)——用不好?之实践不足》 本篇继续讲设计模式用不好的常见原因,这是第二个:使用设计模式的时机不对。 二、时机不对 这里说的时机并不是单纯指软件研发周期中的时间阶段&…

解决Matlab报错:MEX 文件 ‘D:\MATLAB\toolbox\maple\maplemex.mexw64‘ 无效: 缺少依赖共享库

安装Maple之后,再使用MATLAB就报了以上错误。 按照以下解决方法可以正常运行: 1. 在添加路径下删除D:\matlab\toolbox\Maple 2. 再添加路径 D:\matlab\toolbox\symbolic 3. 保存

docker部署Stirling-PDF

github网址: GitHub - Stirling-Tools/Stirling-PDF: #1 Locally hosted web application that allows you to perform various operations on PDF files 1、官方docker镜像无法拉取,使用别人阿里云私人镜像仓库下载Stirling-PDF镜像: regi…

[机器学习]决策树

1 决策树简介 2 信息熵 3 ID3决策树 3.1 决策树构建流程 3.2 决策树案例 4 C4.5决策树 5 CART决策树(分类&回归) 6 泰坦尼克号生存预测案例 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import …

Vue3流程图插件-Vue Flow

1、安装:通过 npm 或 yarn 安装 Vue Flow。 npm install vueflow/core# 或者yarn add vueflow/core 2、引入:在你的 Vue 3 项目中引入 Vue Flow。 import { VueFlow, Background, Controls, MiniMap } from vueflow/core;3、使用:在 Vue…

linux-软件包管理-编译与安装源码包

Linux 软件包管理:编译与安装源码包 在 Linux 系统中,软件的安装通常通过两种方式进行:一是使用包管理工具直接安装预编译的二进制包,二是从源码编译和安装软件包。虽然使用二进制包更为便捷,但从源码编译和安装软件包…

2024年商业变革下的全新商业模式:37拼购模式

在步入2024年的新时代,商业版图正经历一场深刻转型。市场充斥着产品冗余与同质化挑战,加之私域社交电商领域的竞争白热化,传统商业路径已显疲态。正是这片蓝海之中,一种新兴模式——“37拼团”横空出世,它凭借独到的运…

vue3+ant design vue 中弹窗自定义按钮设置及以冒号为基准布局

1、自定义弹窗按钮&#xff0c;去除取消和确定按钮。&#xff08;网上很多方法都是说通过插槽来实现&#xff0c;但是试了下不生效&#xff0c;那既然插槽不生效的话&#xff0c;干脆直接写按钮就好了&#xff09; <a-modalv-model:open"open"title"人员信息…

JavaScript substr() 方法

定义和用法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。 <script type"text/javascript">var str"Hello world!" document.write(str.substr(3))</script>lo world!<script type"text/javascript">v…

文达通从创业板、北交所转战港股:净利润下滑,资产负债率124%

《港湾商业观察》施子夫 8月13日&#xff0c;青岛文达通科技股份有限公司&#xff08;以下简称&#xff0c;文达通&#xff09;递表港交所获受理&#xff0c;联席保荐机构为山证国际、浤博资本。 在选择递表港交所前&#xff0c;文达通曾于新三板挂牌上市并且还曾尝试谋求创业…

Kotlin 极简小抄 P2(插值表达式、运算符、选择结构赋值)

一、Kotlin Kotlin 由 JetBrains 开发&#xff0c;是一种在 JVM&#xff08;Java 虚拟机&#xff09;上运行的静态类型编程语言 Kotlin 旨在提高开发者的编码效率和安全性&#xff0c;同时保持与 Java 的高度互操作性 Kotlin 是 Android 应用开发的首选语言&#xff0c;也可以…

docker-compose 之 redis-stack

介绍 ‌ Redis和Redis Stack的主要区别在于功能和适用场景‌ ‌功能差异‌&#xff1a; Redis是一个开源的内存数据结构存储系统&#xff0c;主要用作数据库、缓存和消息代理&#xff0c;支持多种数据结构如字符串、列表、集合等&#xff0c;并提供丰富的操作命令&#xff0c…

Python--常见的数据格式转换

下面是几个常见的数据格式转换的示例&#xff0c;涵盖了一些常用的格式&#xff0c;如 CSV、XML、YAML 等。每个示例都会介绍如何从一种格式转换到另一种格式。 1. CSV 转 JSON CSV 文件通常以逗号分隔&#xff0c;行代表记录&#xff0c;列代表字段。我们可以使用 csv 和 js…

C++:动态内存分配(new、delete 相比 malloc、free的优势)与运算符重载

动态内存分配与运算符重载 一、动态内存分配&#xff08;一&#xff09;内存的分类&#xff08;二&#xff09;动态内存分配函数(1)new 和delete 的使用&#xff08;1&#xff09;new 的原理&#xff08;2&#xff09;delete 的原理 2、 operator new与operator delete&#xf…

Unity实战案例全解析:PVZ 植物卡片状态分析

Siki学院2023的PVZ免费了&#xff0c;学一下也坏 卡片状态 卡片可以有三种状态&#xff1a; 1.阳光足够&#xff0c;&#xff08;且cd好了可以种植&#xff09; 2.阳光不够&#xff0c;&#xff08;cd&#xff1f;好了&#xff1a;没好 &#xff08;三目运算符&#xff09;&…

物联网在线监测平台如何保障数据安全?

物联网在线监测平台在保障数据安全方面采取了一系列措施,以确保数据的机密性、完整性和可用性。以下是一些关键的保障措施: 1. 数据加密 传输加密:使用SSL/TLS等安全协议对传输过程中的数据进行加密,防止数据在传输过程中被窃取或篡改。存储加密:对存储在平台上的数据进行…

kafka 配置自定义序列化方式

序列化 kafka 需要将消息内容序列化&#xff08;Serializer&#xff09;成字节数组才能发送到 Broken节点 消费者需要将字节数组反序列化&#xff08;Deserializer&#xff09;为消息内容&#xff0c;然后消费消息。接口定义如下 public interface Serializer<T> exte…