【qt小系统】通过qt折线图实现论文内容-快餐店排队效能分析

在这里插入图片描述

摘要:
商户收银需求与收银能力不匹配,是一个普遍问题,高峰不足/平常过剩。参考论文《混合制排队模型下中式快餐店排队系统的优化_荣艳蕊.pdf》,本文主要使用QT5、QtChart等完成了基于以上论文模型的关于排队模型优化的图表对比功能,其中涉的数据公式计算使用C++完成。
运用运筹学中混合制排队模型对某中式快餐店排队系统进行优化, 在常规优化方案的基础上 提出进一步的优化方案。
通过优化不仅使该店降低了服务成本, 提高了服务效率, 而且增强了顾客满意度, 增加了经济效益。
根据运筹学中的排队论对中式快餐店作出的技术性定量分析, 通过建立数学模型来减少平均等待时间。
实现了以较低投入成本获得较高顾客满意度的排队优化目标, 从而带来直接的经济效益, 为饭店顾客排队系统优化提供了一个思路。
文中源码文件【获取方式】:关注公众号:利哥AI实例探险, 给公众号发送 “qt折线图”
获取下载方式,关注发送关键字即可获取下载方式,无套路。由于本人能力有限,难免有疏漏之处。

原文链接:通过qt折线图实现论文内容-快餐店排队效能分析

1. 系统演示

请添加图片描述

2. 基本介绍

排队论是研究排队系统( 又称随机服务系统) 的数学理论和方法, 是运筹学的一个重要分支。 它是通过研究各种服务系统的排队现象, 解决服务系统最优设计和最优化控制的一门科学。
根据运筹学中的排队论对中式快餐店作出的技术性定量分析, 通过建立数学模型来减少平均等待时间。 实现了以较低投入成本获得较高顾客满意度的排队优化目标, 从而带来直接的经济效益, 为饭店顾客排队系统优化提供了一个思路。
[图片]

可根据以下公式计算出排队系统的服务指标( 其中λ为单位时间内平均的顾客数即平均到达率, μ为单位时间内服务完的顾客数即平均服务率, P0 为系统服务台空闲的概率, PK 为系统处于K 状态顾客不能再进入的概率即顾客损失率, λe 为实际平均到达率即单位时间内实际可进入系统的顾客平均数) :
[图片]

3. 理论模型

适用运筹学中排队论中的:混合制 M/M/n/m/∞ 模型,n=收银台数,m=座位人数

  • 假设条件:
    1. 菜品性价比高、顾客流量充足,高峰期明显。客流分布:泊松,收银分布:负指数。
    2. λ=平均到达率(顾客到达量 人/分)。μ=平均服务率(收银速度 人/分 );平均客单价KD。
    3. ρ = λ/μ,收银台空闲概率 Pk =ρ^k* (1- ρ) / [1-ρ^(m+1)] ; k=0,1,2, ; 收银员成本CB。
    4. 排队长度 Lq = ρ /(1-ρ ) - (m+1)*ρ((m+1)]/【1-ρ)(m+1)】- (1-P0);
    5. 顾客等待时间 Wq = Lq/ [λ (1-Pm)];当Wq超过T(10分钟)时,顾客就会流失。
  • 问题:配备多少收银台n,商户利润是最大化的?
    商户案例:
  • 相关参数:
    • 高峰期(11:30–12:30)60分,m=35桌*4人/桌=140人,打包比例7.8%。平均排队6分钟,最长48人。
    • 顾客买单后堂食时间18.4分钟(翻台率3.3次/60分),λ = 16人/分,平均客单价KD=22.1元。
    • 收银员:收银速度 RS = 3.5人/分, 收银员数量 RN人=1.3(0.3为经理),工资 GZ = 5000元/月。
    • 机器:收银速度 JS = 2.6人/分,机器人数量 JN台=2,租金 ZJ = 2500元/月,人工协助率 α= 20%。
    • μ = RS( RN - JNα)+ JS*JN = 8.35
  • 测算结果:平均排队等待时间 8.4分钟,排队长度70人,与实际检验结果相近。

4. 核心代码

可以根据核心代码自行编码调试,或下载源码修改调试:

void Init(){
        chart = new QChart();
    chart->setTitle("横轴: 店面桌数(按4人/桌计), 纵轴: 排队等待时间(分钟)");
    axisX = new QValueAxis;
    axisX->setRange(12, 50); //设置范围
    axisX->setLabelFormat("%u"); //设置刻度的格式
    axisX->setGridLineVisible(true); //网格线可见
    axisX->setTickCount(50-12); //设置多少格
    axisX->setMinorTickCount(1); //设置每格小刻度线的数目
    //
    axisY = new QValueAxis;
    axisY->setRange(0, 60); //设置范围
    axisY->setLabelFormat("%u"); //设置刻度的格式
    axisY->setGridLineVisible(true); //网格线可见
    axisY->setTickCount(7); //设置多少格
    axisY->setMinorTickCount(10); //设置每格小刻度线的数目
    //
    chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    ui->horizontalLayout->addWidget(chartView);
    //
    ui->lineEdit_ftl->setPlaceholderText("翻台率");
    ui->lineEdit_dbl->setPlaceholderText("1-打包比例");
    //
    QLineSeries *seriesLine = new QLineSeries();
    seriesLine->setName("分割线");
    seriesLine->setColor(QColor(255, 255, 0));
    for(int i=12; i<=50; i++){
        seriesLine->append(i, 10);
    }
    chart->addSeries(seriesLine);
    chart->setAxisX(axisX, seriesLine);
    chart->setAxisY(axisY, seriesLine);
}
void Dialog::on_pushButton_clicked()
{
    double rgsd = ui->lineEdit_rgsd->text().toDouble();
    double rgsl = ui->lineEdit_rgsl->text().toDouble();
    double jqsd = ui->lineEdit_jqsd->text().toDouble();
    double jqrsl = ui->lineEdit_jqrsl->text().toDouble();
    double rgxzl = ui->lineEdit_rgxzl->text().toDouble();
    double miu = rgsd*(rgsl - jqrsl * rgxzl) + jqsd*jqrsl;

    double ftl = ui->lineEdit_ftl->text().toDouble(); //翻台率3
    double dbl = ui->lineEdit_dbl->text().toDouble(); //除了打包率
    int gfq = ui->lineEdit_gfq->text().toDouble(); //高峰期时间

    int RobotCount = jqrsl;

    int nRowCount = ui->tableWidget->rowCount();
    QLineSeries *series = new QLineSeries();
    series->setName(QString("%1台").arg(RobotCount));
    QString Log;
    for(int i=0; i<nRowCount; i++){
        int zhuoshu = ui->tableWidget->item(i, 0)->text().toInt();
        int m = zhuoshu*4;

        double lamada = m*ftl/dbl/gfq;

        double rou = lamada/miu;
        double P0 = (1 - rou) / (1 - pow(rou, m+1));
        double Pm = pow(rou, m) * P0;
        Pm = QString::number(Pm, 'f', 2).toDouble();
        double lamada_shiji = (1 - Pm)*lamada;
        double duichangL = rou/(1 - rou) - (m + 1) * pow(rou, m+1) / (1 - pow(rou, m+1));
        double pduichangL = fabs(duichangL - (1 - P0));
        double dengdaijiashouyinshijian = duichangL / lamada_shiji;
        double dengdaishijian = pduichangL / lamada_shiji;
        QString Wq = QString::number(dengdaishijian, 'f', 2);
        qDebug() << "桌数=" << zhuoshu << "台数=" << RobotCount
                 << lamada << miu << rou << P0 << Pm << lamada_shiji << duichangL
                 << pduichangL << dengdaijiashouyinshijian << dengdaishijian
                 << Wq;
        QString szLog = QString("%1,%2").arg(zhuoshu).arg(Wq);
        Log.append(szLog).append("\n");

        series->append(zhuoshu, Wq.toDouble());
    }
    chart->addSeries(series);
    chart->setAxisX(axisX, series);
    chart->setAxisY(axisY, series);
//    chart->createDefaultAxes();
    ui->textEdit->setText(Log);
}

往期文章回顾

【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示
【深度学习】行人跌倒行为检测软件系统【深度学习】火灾检测软件系统
【深度学习】吸烟行为检测软件系统【深度学习】数竹签演示软件系统
【深度学习】菜品目标检测软件系统QT5集成FTP实现文件及文件夹的下载
QT集成开源日志库示例python源码加密之Cython方案简单示例
【python源码加密】Cython针对python工程多层级目录处理办法http服务网络请求如何确保数据安全(含python示例源码)
http请求数据传输时确保完整性和保密性方案(含源码)QT集成百度在线地图JS API实现交互及特定效果
【qt小游戏】小老鼠闯迷宫小游戏(附源码)【qt小系统】传感器云平台3D散点图(附源码)
  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值