基于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32556.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译OpenSSL

OpenSSL简介 OpenSSL是一个用于加密和安全连接的开源软件库。它提供了一系列的加密算法、密码学功能和安全协议的实现&#xff0c;包括SSL&#xff08;Secure Sockets Layer&#xff09;和TLS&#xff08;Transport Layer Security&#xff09;等用于网络安全的协议。OpenSSL可…

Win 转 MacBook Pro 踩坑指南

前言 Window 和 macOS 系统的差异还是很大的&#xff0c;我从 Thinkpad 转用 M1 的 Macbook pro 已经一年了&#xff0c;几乎没有任何不适应&#xff0c;整体感受那是真的牛&#x1f443;&#xff0c;速度和续航惊艳到我了&#xff0c;同时开启 6个 vscode 加几十个浏览器标签…

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!

此文章懒得排版了&#xff0c;为了找出这个bug, 星期六的晚上我从9点查到0点多&#xff0c;此时我心中一万个草泥马在崩腾&#xff0c;超级想骂人&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; uniCloud 不想…

数据结构和算法--仅仅用于理解里面的术语,入门级别

数据结构和算法 预先知识&#xff1a;java 黑马前29节 cmd命令&#xff1a; 文件夹路径不区分大小写 E: dir:查看所有文件 cd 目录 :进入 cd… 返回上一级 cd 目录1\目录2 cd\ 回到根目录 cls 清屏 exit 退出 打开文件夹必须用cd 查找&#xff0c;但是文件不用&am…

【设计模式】通过访问者模式实现分离算法与对象结构

概述 定义&#xff1a;封装一些作用于某种数据结构中的各元素的操作(将数据结构于元素进行分离)&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色: 抽象访问者&#xff08;Visitor&#xff09;角色&#xff…

低版本 Linux 系统通过二进制方式升级部署高版本 Docker

​ 一、背景&#xff1a; 在一些 Linux 系统中&#xff0c;由于系统自带的软件源版本较低&#xff0c;或者因网络、权限等限制无法直接通过源文件来升级到最新版本的 Docker。这种情况下&#xff0c;采用二进制方式升级部署高版本 Docker 就成为一种有效的解决方案。下面将详…

SpringAI+Ollama+DeepSeek本地大模型调用

前言 大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域取得了突破性进展&#xff0c;但其庞大的计算资源需求和高昂的调用成本&#xff0c;使得许多开发者望而却步。如何高效、便捷地调用大模型&#xff0c;并将其应用于实际场景&#xff0c;成为了亟待解决的问题。…

【大模型科普】AIGC技术发展与应用实践(一文读懂AIGC)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

数据结构与算法:归并排序

目录 归并排序的基本思想 归并排序的特性总结 代码 归并排序的非递归版 归并排序的基本思想 归并排序是建立在归并操作上的一种有效的排序算法。改算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列…

阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台

阿里云操作系统控制台评测&#xff1a;国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展&#xff0c;企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具&#xff0c;正逐步成为企业高效管理…

爬虫案例十三js逆向模拟登录中大网校

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; js 逆向模拟登录中大网校 提示&#xff1a;以下是本篇文章正文内…

sql靶场--布尔盲注(第八关)保姆级教程

目录 布尔盲注&#xff08;第八关&#xff09; 1.判断 2.确认布尔盲注 3.手工尝试布尔盲注 表名字符 表数 表名长度 表字符 字段数 字段名长度 字段字符 4.脚本布尔盲注注入 布尔盲注&#xff08;第八关&#xff09; 1.判断 布尔盲注了&#xff0c;这种页面只会有…

【C++入门】变量和基本类型

目录 一、 基本内置类型 1.1. 整型&#xff08;Integer Types&#xff09; 1.2. 浮点型&#xff08;Floating-point Types&#xff09; 1.3. 字符型&#xff08;Character Type&#xff09; 1.4. 布尔型&#xff08;Boolean Type&#xff09; 1.5. 示例代码 二、变量声明…

JVM内存结构笔记03-方法区

文章目录 方法区1.定义2.组成方法区与永久代和元空间的关系为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 3.方法区常用参数4.运行时常量池常量池运行时常量池定义查看class文件 方法区 1.定义 方法区属于是 JVM 运行时数据区域的一块逻辑区域&#xff0c;是各个…

数据库语句

环境变量path下的目录是系统目录。 #include <iostream> #include <mysql.h> #pragma comment(lib,"libmysql.lib")//链接libmysql.dll动态库的中间桥 // MYSQL* conn;//数据库句柄。后面还有网络句柄&#xff08;用来网络收发数据&#xff09; bool co…

Word 小黑第15套

对应大猫16 修改样式集 导航 -查找 第一章标题不显示 再选中文字 点击标题一 修改标题格式 格式 -段落 -换行和分页 勾选与下段同页 添加脚注 &#xff08;脚注默认位于底部 &#xff09;在脚注插入文档属性&#xff1a; -插入 -文档部件 -域 类别选择文档信息&#xff0c;域…

【从零开始学习计算机科学】编译原理(七)运行时刻环境

【从零开始学习计算机科学】编译原理(七)运行时刻环境 运行时刻环境存储组织空间的栈式分配活动树活动记录和控制栈简单栈式存贮分配C语言的过程调用和过程返回时的存贮管理堆式存储分配堆式存储分配的功能垃圾回收基于跟踪的垃圾回收短停顿垃圾回收运行时刻环境 存储组织 …

一维下料之 *贪心算法* —— CAD c#二次开发

一维下料之贪心算法&#xff0c;需求如下 已知条件 我们有一批长度为 380 米 的原材料&#xff08;例如钢管、木材等&#xff09;。 切割需求 需要从这些原材料中切割出以下长度的小段&#xff1a;42 米&#xff1a;需要 13 段 140米&#xff1a;需要 23 段 130 米&#xff1a…

刷leetcode hot100--动态规划3.12

第一题乘积max子数组[1h] emmmm感觉看不懂题解 线性dp【计划学一下acwing&#xff0c;挨个做一下】 线性动态规划 相似题解析 最长上升子序列 最大上升子序列和 最大连续子段和 乘积最大子数组_哔哩哔哩_bilibili 比较奇怪的就是有正负数和0&#xff0c;如何处理&#xff1f…

Linux安装升级docker

Linux 安装升级docker Linux 安装升级docker背景升级停止docker服务备份原docker数据目录移除旧版本docker安装docker ce恢复数据目录启动docker参考 安装找到docker官网找到docker文档删除旧版本docker配置docker yum源参考官网继续安装docker设置开机自启配置加速测试 Linux …