2024年第十四屆MathorCup高校數學建模挑戰賽
D題 量子計算在礦山設備配置及運營中的建模應用
原題再現:
??隨著智能技術的發展,智慧礦山的概念越來越受到重視。越來越多的設備供應商正在向智慧礦山整體解決方案供應商轉型,是否具備提供整體解決方案的能力,也逐步成為眾多礦山設備企業的核心競爭力。智慧礦山依靠先進的信息技術和設備自動化,實現礦山開采的高效、安全、環保和智能化。在智慧礦山的運營過程中,如何根據給定的工作量、機型斗容效率、油耗和價格等因素,設計出一套最優的設備配置及運營方案,包括合理采購、分配和使用挖掘機、礦車等重要資源,是提高競爭力的關鍵QUBO(Quadratic Unconstrained Binary Optimization,二次無約束二值優化)模型是一種適配相干伊辛機(Coherent Ising Machine,CIM)的模型其形式為 min x"Qx,x∈{0,1}",其中Q為nxn矩陣。本賽題主要基于智慧礦山設備配置及運營方案設計的場景,通過將問題建模為QUBO形式,使用Kaiwu SDK完成對問題的求解。Kaiwu SDK是一套基于相干伊辛機求解QUBO模型的軟件開發套件,可以訪問本鏈接(https://developer.qboson.com/sdkDownload)來獲取 Kaiwu SDK。附件中提供了QUBO建模的參考資料(附件 1)以及相關的應用案例論文(附件 2,附件3)
??假定你們是智慧礦山項目團隊,負責為一家即將投入運營的智慧礦山設計一個綜合的設備配置與運營方案,該方案需考慮因素:
??·挖掘機斗容:不同類型挖掘機的斗容大小(立方米)
??·挖掘機作業效率:各型號挖掘機作業效率(斗/小時)·礦車裝載量:各型號礦車的裝載量(立方米)
??·油耗:各型號挖掘機和礦卡設備的油耗(升/小時)·價格:各型號挖掘機和礦車設備的購買(萬元)
??·人工成本:操作每臺挖掘機和礦車的工資、補貼等人工成本(元/月)·??·維護成本:設備的月維護成本(元/月)
??假設該項目規模及其設備的數據如下:
??·啟動資金 2400萬元,計劃開采5年。
??·可選挖掘機有4種,設備參數如下表格1所示:
已購買以下3 種類型的礦車,每種類型的礦車數量分別為7輛、7 輛和3輛,設備參數如表2所示:
??·挖掘機和礦車按照每月工作 20天,每天工作8小時,油價7元/升。礦石價格為 20 元/立方米。
??·現實中需要考慮如下約束:
??·1、在實際作業中,挖掘機與礦車的匹配存在一定約束:
??··由于挖掘機鏟斗寬度和礦車寬度的對應關系,大型號的挖掘機無法匹配小型號的礦車;
??··為避免裝車效率太慢,小型號的挖掘機也不會匹配太大型號的礦車:不同型號的挖掘機與礦車的匹配關系如表3所示:
??·例如對于一臺挖掘機2來講,至少需要兩輛礦車1或者一輛礦車2才能保證作業穩定進行。
??·2、礦山在實際運營中,需要小型挖掘機兼顧進行修路、搭臺、處理邊角料等維護作業:同時為保證整體的作業效率,需要一定數量的大型挖掘機。可以歸結為:整體包含的挖掘機型號不能少于3種。
??·3、智慧礦山系統運營過程中的效率按照如下規則計算:
??·假如挖掘機與礦車的匹配關系恰好時(等于表格內數值),或者給挖。掘機分配的礦車數量多于表格內數值時,每日作業量以挖掘機效率為準;·
??·假如給挖掘機分配的礦車數量少,則挖掘機會有部分時間處于等待礦車的狀態,則每日作業量為挖掘機效率乘以相應的比例。比如,某挖掘機標準匹配2臺礦車,而只安排了1臺,則該挖掘機每天的作業量為標準作業量的 1/2。
??·4、設定以下假設條件:
??··為簡化管理和調度的復雜性,降低因更改匹配而導致的安全事故風險,假設挖掘機和礦車匹配關系是固定不變的;
??··假設同一型號挖掘機只能匹配同一型號的礦車;
??·只需要第一年花費挖掘機的采購費用基于以上場景與給出的數據,你們團隊需要完成如下任務:
??·問題 1:假設不考慮挖掘機的使用壽命,表格4中給定了對于每種類型的控掘機能夠帶來的長期利潤的折現值的估計。請對這個化的場景建立 OUBO 模型,求解給出在預算范圍內最大化總利潤的采購方案,即需要采購的挖掘機型號和對應的數量。分別使用 Kaiwu SDK 內置的模擬退火求解器和 CIM 模擬器對模型進行求解。
??·問題 2:假設挖掘機和礦車的使用壽命為5年,根據上述因素,建立一個 OUBO 模型,規劃需要采購的挖掘機型號和數量,并給出挖掘機和礦車之間的匹配關系,使得5年內的總利潤最大化(利潤=收益一各種成本)。OUBO 模型的求解使用 Kaiwu SDK 的模擬退火求解器和 CIM 模擬器進行,請盡量減少量子比特的數量(SDK 僅支持 100 比特以內的問題求解)。當模型比特數超出 SDK 限制時,請嘗試思考創新性的求解方案。
??·問題 3:考慮在問題2的場景中,當已購買10 種類型的礦車(參數參考表 5),可選的挖掘機數量為 10(參數參考表 6),整體包含的挖掘機型號不能少于5種,挖掘機和礦車的匹配關系如表7所示,啟動資金為4000萬元時,建立 OUBO 模型并使用 Kaiwu SDK 求解最優的采購方案,并給出挖掘機和礦車之間的匹配關系(提示:當建立的 OUBO 模型比特數較高時,可以嘗試例如 subOUBO 等方法對問題進行求解。subOUBO 方法是一種通過量子計算和經典計算結合的方法。通過每次提取一個 OUBO 的子問題,即 subOUBO,求解 subOUBO 得到解后更新原問題的解,通過多次求解 subOUBO 來求解原問題,詳見參考附件 4)。
??·問題 4:請舉例一個潛在可以通過構建合適的 QUBO 模型進行決策優化應用場景。這個場景應該具有實際應用意義,有潛力進行規模化應用,并且能夠展示量子計算的優勢。描述應該包括必要的背景信息、研究方法思路以及預期結果,并提供技術路線圖,QUBO 模型表達式和相關參考文獻。
整體求解過程概述(摘要)
??本文深入研究了基于QUBO模型的礦山設備配置與運營方案優化問題.首先對智慧礦山設備配置和運營的復雜性進行了問題重述,文中對挖掘機和礦車的匹配關系、采購成本、使用壽命等因素進行了合理簡化,以便建立易于處理的數學模型.算法背景介紹探討了QUBO模型的基本原理、構建方法和kaiwuSDK的功能特點,并提出了利用QUBO模型設計最優設備配置及運營方案的目標,最終實現利潤最大化.
??針對問題一:關注于在預算范圍內最大化總利潤的挖掘機采購方案.通過對挖掘機的長期利潤折現值和采購價格進行分析,建立了QUBO模型,并使用kaiwuSDK內置的模擬退火求解器和CIM模擬器進行求解.從理論和實踐的角度,將模擬退火算法對結果做對比分析,指出了KaiwuSDK在處理大規模問題時的優點.最后得出結論當挖掘機1、2、3分別購買1、2、10輛時,得到總利潤最大,為58000萬元.
??針對問題二:在問題一上增加了使用壽命約束,尋求五年內總利潤最大化的配置方案,可以使用量子優化算法求解.并且分析了將礦車和挖掘機不完全匹配的情況,研究得出結論在挖掘機1對應礦1需要7輛,挖掘機2對應礦2需要7輛,挖掘機3對應礦3 需要2輛,挖掘機4對應礦3需要1輛時,利潤最大585086400元
??針對問題三:在問題二的基礎上增加了預算和設備類型的約束,探索最優的采購方案.根據問題二挖掘機和礦車恰好匹配,引入松弛變量和懲罰函數將目標函數轉化為QUBO模型的形式,研究得出結論在挖掘機1對應礦3需要2輛,挖掘機2對應礦4需要1輛,挖掘機3對應礦1需要1輛,挖掘機3對應礦2需要1輛,挖掘機3對應礦4需要1輛,挖掘機3對應礦5需要2輛,挖掘機7對應礦6需要1輛,挖掘機10對應礦9需要1輛,挖掘機10對應礦10需要1輛時,利潤最大681916400元
??針對問題四:將QUBO模型應用于城市軌道交通末班車銜接優化,提出了一個可實際應用的優化場景,包括背景信息、研究方法思路、預期結果和技術路線圖.該問題的解決不僅能夠提高城市軌道交通的運營效率,還能為乘客提供更加便捷的換乘服務.針對靈敏度分析:通過改變啟動資金和油價等參數,研究了模型對變化的敏感程度,評估了模型的穩定性.有助于理解在不同背景下礦山運營方案的可行性.
??總體而言,本文通過展示了QUBO模型在解決復雜優化問題中的有效性和潛力.通過對礦山運營方案的優化,可以顯著提高礦山企業的市場適應性,推動礦業的可持續發展.此外,本文的研究也為量子計算技術在解決組合優化問題提供了有益的參考,展現了量子計算在未來科技發展中的重要價值.
模型假設:
??因為實際中智慧礦山設備配置和運營是一個非常復雜的過程,為了便于建模,我們將問題合理簡化并提出以下假設:
???為簡化管理和調度的復雜性,降低因更改匹配而導致的安全事故風險,假設挖掘機和礦車匹配關系是固定不變的;
???假設同一型號挖掘機只能匹配同一型號的礦車?
???只需要第一年花費挖掘機的采購費用;
問題重述:
??隨著技術進步,智能化礦山逐漸成為行業的焦點.眾多提供礦山設備的公司正轉變成為提供全面智能化礦山解決方案的供應商,這種轉型能力正逐步演變為企業的核心競爭力.智能化礦山利用尖端的信息技術和自動化技術,以提高礦山作業的效率、安全性、環保性和智能化水平.在智能化礦山運營中,關鍵任務是根據工作量、設備容量、效率、燃油消耗和成本等參數,規劃出最優質的設備配置和運營策略.這涉及到對挖掘機、礦車等關鍵資源的合理采購、分配和使用,這對于提升企業的競爭力至關重要.在本研究案例中,我們的目標是為一家即將開業的智能化礦山制定一套全面的設備配置和運營方案,問題如下:
??問題一:我們不考慮挖掘機的使用壽命,已知給定了每種類型的挖掘機能夠帶來的長期利潤的折現值估計,求給在預算范圍(2400萬)內最大化總利潤的采購方案,即求出需要采購的挖掘機型號和對應的數量.然后分別使用KaiwuSDK內置的的模擬退火求解器和CIM模擬器對模型進行求解.
??問題二:我們假設挖掘機和礦車的使用壽命為5年,已知題目對挖掘機型號種類、礦車數量等約束條件,求解需要采購的挖掘機型號和數量,并給出挖掘機和礦車之間的匹配關系,使得5年內的總利潤最大化.
????????????利潤=利益-各種成本
??然后分別使用KaiwuSDK內置的的模擬退火求解器和CIM模擬器對模型進行求解,由于SDK僅支持100比特以內的問題求解,所以求解過程中,我們需要盡量減少量子比特的數量.
??問題三:我們在考慮問題二的場景中,已知已購買的礦車類型是10,可選的挖掘機數量為10,挖掘機和礦車的匹配關系,以及啟動資金為4000萬元,求解在整體包含的挖掘機型號不能少于5種的情況下最優的采購方案.
??問題四:舉出一個潛在可以通過構建合適的QUBO模型進行決策優化應用場景,且這個場景要具有實際應用意義,有潛力進行規模化應用,并且能夠展示量子計算的優勢.題目要求描述包括背景信息、研究方法、思路和預期結果,并提供技術路線圖,QUBO模型表達式和相關參考文獻.
模型的建立與求解整體論文縮略圖
全部論文請見下方“ 只會建模 QQ名片” 點擊QQ名片即可
部分程序代碼:
import numpy as np
import pandas as pd
from collections import defaultdict
import random
import math# ---------------------- 數據加載 ----------------------
# 假設數據格式:鄰區關系矩陣、沖突/混淆/模3干擾的MR數矩陣
# conflict_mr: 沖突MR矩陣 (2067x2067)
# confusion_mr: 混淆MR矩陣 (2067x2067)
# mod3_mr: 模3干擾矩陣 (2067x2067)# 此處用隨機數據示例,實際替換為真實數據
n = 2067
conflict_mr = np.random.randint(0, 100, (n, n))
confusion_mr = np.random.randint(0, 100, (n, n))
mod3_mr = np.random.randint(0, 100, (n, n))# ---------------------- 目標函數定義 ----------------------
def calculate_loss(pci_assignment):"""計算當前PCI分配的總損失"""total = 0# 遍歷所有小區對for i in range(n):for j in neighbors[i]: # neighbors預先生成鄰區列表# 沖突MR: 鄰區且PCI相同if pci_assignment[i] == pci_assignment[j]:total += conflict_mr[i][j]# 模3干擾MR: 鄰區且PCI%3相同if pci_assignment[i] % 3 == pci_assignment[j] % 3:total += mod3_mr[i][j]# 混淆MR: 檢查所有鄰區的PCI是否重復seen = set()for neighbor in neighbors[i]:p = pci_assignment[neighbor]if p in seen:total += confusion_mr[i][neighbor]seen.add(p)return total# ---------------------- 模擬退火算法 ----------------------
def simulated_annealing(initial_pci, max_iter=10000):current_pci = initial_pci.copy()current_loss = calculate_loss(current_pci)best_pci = current_pci.copy()best_loss = current_lossT = 1.0T_min = 1e-5alpha = 0.99for _ in range(max_iter):# 生成新解:隨機修改一個小區PCInew_pci = current_pci.copy()cell = random.randint(0, n-1)new_pci[cell] = random.randint(0, 1007)# 計算損失變化(僅計算被修改小區的影響)delta = 0# 需要實現增量計算,此處簡化為全量計算(實際需優化)new_loss = calculate_loss(new_pci)delta = new_loss - current_loss# 接受更優解或以概率接受劣解if delta < 0 or random.random() < math.exp(-delta / T):current_pci = new_pcicurrent_loss = new_lossif current_loss < best_loss:best_pci = current_pci.copy()best_loss = current_lossT *= alphaif T < T_min:breakreturn best_pci, best_loss# ---------------------- 初始化與運行 ----------------------
if __name__ == "__main__":# 預生成鄰區列表(示例,實際從數據加載)neighbors = defaultdict(list)for i in range(n):for j in range(n):if conflict_mr[i][j] > 0:neighbors[i].append(j)# 初始解:隨機分配initial_pci = np.random.randint(0, 1008, n)# 運行模擬退火best_pci, best_loss = simulated_annealing(initial_pci)print(f"最優總損失: {best_loss}")# 輸出PCI分配結果pd.DataFrame(best_pci, columns=['PCI']).to_csv('pci_assignment.csv', index_label='CellID')