基于python的升级队列加速决策

a-f大等级是3级
a-c建筑每升1级分别需要8天
d-f建筑每升1级分别需要10天
目前以下建筑队列正在从0级升至1级
建筑A升级需要7天05:16:20
建筑b升级需要06:06:54
建筑c升级需要00:37:00
建筑d升级需要01:51:01
建筑e升级需要09:07:10
建筑f升级需要07:10:10
每30分钟会产生一个随机时间的升级加速包:15,30,45,60,120分钟
基于python计算,每一次随机产生的加速包,用于加速哪一个队列,做出决策优先加速哪一个建筑,最快完成建筑升级。
import randomclass Building:def __init__(self, name, building_type, initial_remaining):self.name = nameself.type = building_typeself.level = 0 # 当前等级self.stage_remaining = initial_remaining # 当前阶段剩余时间(秒)self.upgrading = initial_remaining > 0 # 是否正在升级def apply_accelerator(self, accelerator_seconds):if not self.upgrading or self.level >= 3:return# 应用加速self.stage_remaining -= accelerator_secondsif self.stage_remaining <= 0:self.level += 1if self.level >= 3:self.upgrading = Falseself.stage_remaining = 0else:# 开始下一阶段的升级if self.type == 'abc':self.stage_remaining = 8 * 86400 # 8天else:self.stage_remaining = 10 * 86400 # 10天self.upgrading = Trueelse:self.upgrading = Truedef get_total_remaining_time(self):if self.level >= 3:return 0total = self.stage_remainingremaining_stages = 3 - (self.level + 1)if remaining_stages <= 0:return totalif self.type == 'abc':total += remaining_stages * 8 * 86400else:total += remaining_stages * 10 * 86400return total# 初始化建筑队列(时间转换为秒)
buildings = [Building('A', 'abc', 7 * 86400 + 5 * 3600 + 16 * 60 + 20), # 7天05:16:20Building('B', 'abc', 6 * 86400 + 6 * 3600 + 6 * 60 + 54), # 6天06:06:54Building('C', 'abc', 37 * 60), # 00:37:00Building('D', 'def', 1 * 86400 + 51 * 60 + 1), # 01:51:01Building('E', 'def', 9 * 86400 + 7 * 3600 + 10 * 60), # 09:07:10Building('F', 'def', 7 * 86400 + 10 * 3600 + 10 * 60 + 10), # 07:10:10
]def select_best_target(accelerator_seconds, buildings):min_max_time = float('inf')best_building = Nonecurrent_totals = [b.get_total_remaining_time() for b in buildings]current_max = max(current_totals)if current_max == 0:return None, 0for b in buildings:if not b.upgrading:continue# 保存当前状态original_level = b.leveloriginal_stage = b.stage_remainingoriginal_upgrading = b.upgrading# 模拟应用加速temp_b = Building(b.name, b.type, original_stage)temp_b.level = original_leveltemp_b.upgrading = original_upgradingtemp_b.apply_accelerator(accelerator_seconds)# 计算新总时间simulated_totals = []for bb in buildings:if bb.name == b.name:simulated_totals.append(temp_b.get_total_remaining_time())else:simulated_totals.append(bb.get_total_remaining_time())new_max = max(simulated_totals)# 比较最优if new_max < min_max_time or (new_max == min_max_time and best_building is None):min_max_time = new_maxbest_building = belif new_max == min_max_time:if b.get_total_remaining_time() > best_building.get_total_remaining_time():best_building = breturn best_building, min_max_time# 模拟加速包生成和使用
while True:# 随机生成加速包(15/30/45/60/120分钟)accelerator = random.choice([15, 30, 45, 60, 120]) * 60 # 转换为秒best_building, new_max = select_best_target(accelerator, buildings)if not best_building:print("所有建筑已升级完成!")break# 应用加速包best_building.apply_accelerator(accelerator)print(f"使用 {accelerator // 60}分钟加速包到建筑 {best_building.name},当前最长剩余时间:{new_max // 86400}天 {new_max % 86400 // 3600}小时{(new_max % 3600) // 60}分")# 检查是否全部完成if all(b.get_total_remaining_time() == 0 for b in buildings):print("全部建筑升级完成!")break
相关文章:
基于python的升级队列加速决策
a-f大等级是3级 a-c建筑每升1级分别需要8天 d-f建筑每升1级分别需要10天 目前以下建筑队列正在从0级升至1级 建筑A升级需要7天05:16:20 建筑b升级需要06:06:54 建筑c升级需要00:37:00 建筑d升级需要…...
Ragflow技术栈分析及二次开发指南
Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发。 1. Ragflow 存在问题 Ragflow 开源仓库地址:https://github.com/infiniflow/ragflow Ragflow 当前版本: v0.17.0 Ragflow 目前主要存在以下问题: …...
vue上传文件的请求头携带token校验、和携带另外的参数请求
拿element plus UI库举例,(不使用element plus的话js方法通用): <template><el-upload class"upload-demo":http-request"myUploadHttp" action"https://run.mocky.io/v3/9d059bf9-4660-45f2-…...
MySQL的 where 1=1会不会影响性能?
在MySQL中,WHERE 11 是一种常见的SQL编写技巧,通常用于动态生成SQL语句时简化条件拼接。虽然它看起来多余,但在实际使用中,WHERE 11 对性能的影响可以忽略不计。以下是详细分析: 1. WHERE 11 的作用 WHERE 11 是一个恒…...
MyBatis 中SQL 映射文件是如何与 Mapper 接口关联起来的? MyBatis 如何知道应该调用哪个 SQL 语句?
1. 命名空间 (Namespace): SQL 映射文件 (XML): 在 SQL 映射文件的 <mapper> 根元素中,有一个 namespace 属性。这个 namespace 属性的值必须是 Mapper 接口的全限定名(包名 接口名)。 <mapper namespace"com.example.mapper.…...
SICK Ranger3源码分析——断线重连
前言 本文可在https://paw5zx.github.io/SICK-Ranger3-source-code-analysis-01/中阅读,体验更佳 简单分析一下SICK Ranger3源码中断线重连的实现,这一块算是比较容易的,先择出来分析一下。 代码示例仅贴出关键部分以便分析 使用SDK版本为…...
1.7 双指针专题:三数之和(medium)
1.题目链接 15. 三数之和 - 力扣(LeetCode)https://leetcode.cn/problems/3sum/submissions/609626561/ 2.题目描述 给你⼀个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满⾜ i ! j、i ! k 且 j ! k ,同时…...
【JavaEE】Spring Boot配置文件
目录 一、Spring Boot配置文件简介二、properties 配置⽂件说明2.1 properties 基本语法2.2 value("${}")读取配置⽂件 三、yml 配置文件说明3.1 yml 基本格式3.2 yml 配置数据类型 及 读取3.3 yml配置对象及读取ConfigurationProperties(prefix "")3.4 配…...
行为模式---策略模式
概念 策略模式是一种行为设计摸是,它的核心思想是将一些列的算法封装成独立的对象,并使它们可以相互替换,通过上下文进行调用。 策略模式通过算法抽象为独立的策略类,客户端可以根据自身需求选择不同的策略类来完成任务、这种方…...
Word 小黑第15套
对应大猫16 修改样式集 导航 -查找 第一章标题不显示 再选中文字 点击标题一 修改标题格式 格式 -段落 -换行和分页 勾选与下段同页 添加脚注 (脚注默认位于底部 )在脚注插入文档属性: -插入 -文档部件 -域 类别选择文档信息,域…...
OSPF:虚链路
一、虚链路概念 在OSPF中,虚链路(Virtual Link) 是一种逻辑连接,用于解决因网络设计或扩展导致的区域无法直接连接到骨干区域(Area 0)的问题。它是通过中间区域(Transit Area)在两个…...
Ubuntu 22.04 安装配置 FTP服务器 教程
今天搞定在 Ubuntu 22.04 系统上安装和配置 VSFTPD ,还会涉及防火墙设置、SSL/TLS 设置,以及创建专门登录 FTP 服务器的账户。开始! 一、安装 VSFTPD 首先,咱得让系统知道有啥新软件包可以安装。打开终端,输入下面这…...
基于 Selenium 的软件测试方法研究
一、引言 在软件开发的漫长征程中,软件测试宛如一座坚实的堡垒,守护着软件质量的大门。随着互联网技术的飞速发展,Web 应用程序如雨后春笋般涌现,其功能的复杂性和用户交互的多样性不断增加。在这样的背景下,传统的手动…...
网络安全事件响应--应急响应(windows)
应用系统日志 Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。 系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。安全日志记录着事件审计信息,包括用户验证(登录、远程访问等&#x…...
DataEase:一款国产开源数据可视化分析工具
DataEase 是由飞致云开发的一款基于 Web 的数据可视化 BI 工具,支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,帮助用户快速分析业务数据并洞察其趋势,为企业的业务改进与优化提供支持。 DataEase 的优势在于:…...
RTK与RTD基础原理
(文中的部分图片是摘自其他博主的文章,由于比较久,忘记原本链接了,侵删) GPS定位原理 卫星自身有自己的星历与原子钟,因此卫星知道自身准确的空间坐标与时间。因为每个卫星都有原子钟,因此每颗卫星的时间基本上都是相…...
关于MCP SSE 服务器的工作原理
模型上下文协议(Model Context Protocol,简称MCP) 是一种全新的开放协议,专门用于标准化地为大语言模型(LLMs)提供应用场景和数据背景。 你可以把MCP想象成AI领域的“USB-C接口”,它能让不同的A…...
碳中和小程序:助力用户记录低碳行为,推动环保生活
碳中和小程序:助力用户记录低碳行为,推动环保生活 一、碳中和的全民化挑战与数字化机遇 中国承诺2030年前实现碳达峰,2060年前达成碳中和目标。在这一国家战略下,个人碳减排贡献率需从当前不足5%提升至25%。小程序开发技术正成为破解"公众参与度低"“行为量化难…...
Python读取显示Latex的公式文档,Python加载显示markdown文件。
平时用LLM大语言模型去解释文献里面的公式含义直接复制的格式word看不懂,基于这个web可以正常加载显示。 下面是读取的效果展示:下面程序保存为stl_read.py然后运行下面指令。 streamlit run stl_read.pyimport streamlit as st import base64 import …...
mapbox高阶,结合threejs(threebox)添加extrusion挤出几何体,并添加侧面窗户贴图和楼顶贴图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox extrusion挤出几何体二、🍀…...
mock的定义和使用场景
Python自动化中使用mock的示例 在Python自动化测试中,mock 用于模拟对象、函数或方法的行为,以便在隔离的环境中测试代码。以下是一个简单的示例: 假设你有一个 user.py 模块,其中包含一个 get_user_info 函数,用于从…...
Android Retrofit 请求执行模块执行原理深入源码分析(三)
一、引言 Retrofit 是 Square 公司开发的一款优秀的类型安全的 HTTP 客户端,在 Android 和 Java 开发中被广泛使用。它通过简洁的接口定义和强大的注解功能,使得开发者能够轻松地进行网络请求。请求执行模块是 Retrofit 的核心部分之一,负责…...
封装Axios拦截器实现用户无感刷新AccessToken实践指南
一、背景与需求场景 1.1 单点登录体系中的Token管理 在单点登录(SSO)体系下,用户登录后系统会颁发两种令牌: AccessToken:短期有效(2小时),用于接口鉴权 RefreshToken:…...
CSDN博客:Markdown编辑语法教程总结教程(下)
❤个人主页:折枝寄北的博客 Markdown编辑语法教程总结 前言1. LaTex数学公式2. 插入不同类别的图2.1 插入甘特图2.2 插入UML图2.3 插入Mermaid流程图2.4 插入Flowchart流程图2.5 插入classDiagram类图 3. CSDN快捷键4. 字体相关设置4.1 字体样式改变4.2 字体大小改变…...
【Python】06、流程控制语句
文章目录 1.条件判断语句1.1 if 语句2. input 函数3.if-else 语句4.if-elif-else 语句 2.循环语句2.1 while语句2.2 while语句练习:2.3 循环嵌套2.4 break和continue 通过流程控制语句,可以改变程序的执行顺序,也可以让指定程序反复执行多次。…...
《python》—— threading库(线程和多线程)
文章目录 threading简介threading基本概念常用类和方法线程同步线程池实例 threading简介 threading 是 Python 标准库中用于实现多线程编程的模块。多线程编程允许程序同时执行多个任务,提高程序的并发性能,尤其适用于 I/O 密集型任务,例如…...
【数据分享】2000-2024年全国逐年归一化植被指数(NDVI)栅格数据(年最大值)
NDVI,全名为Normalized Difference Vegetation Index,中文名称为归一化植被指数。这个指数可以用来定性和定量评价植被覆盖及其生长活力,我们也可以简单地将它理解为体现植被密度和健康状况的一个指标。 之前我们给大家分享了来源于MOD13A3数…...
【项目】负载均衡式在线OJ
负载均衡式在线OJ 目录 负载均衡式在线OJ 1.项目介绍: 2.comm 2.1 log.hpp 日志等级 开放式日志 时间戳工具 2.2 util.hpp TimeUtil类 PathUtil类 FileUtil类 StringUtil类 3.Compile_server 3.1compile_run.hpp RemoveTempFile CodeToDesc Start 3.…...
前端发布缓存导致白屏解决方案
解决发布H5后因为本地缓存白屏方案 一、 核心配置优化(前提是访问网站的请求能抵达服务器) 方案一:前端项目设置全局不缓存方案 运行逻辑:在H5服务器配置中增加Cache-Control: no-cache或max-age0响应头,禁用静态资…...
大模型开源的工具包有哪些特殊符号可以使用;SEP 是什么
大模型开源的工具包有哪些特殊符号可以使用 目录 大模型开源的工具包有哪些特殊符号可以使用自定义特殊token:special_tokens=True一、**对话轮次分隔符(必选)**二、**系统提示标记(提升指令理解)**三、**中文特色分隔符(贴合书写习惯)**四、**开源模型专属符号(按文档…...
