張曉潔 李晶 鄧紫嫣 林巧儀 王鑫
摘? 要:為評估各個地區(qū)的出行風險度,選取周邊的風險百分比以及確診人數(shù)等多種數(shù)據(jù)為影響因素,采用Topsis算法根據(jù)出行風險百分比對不同地區(qū)進行排序。疫情的爆發(fā)將疫苗接種推向高潮,為降低人流密度,減少人員交叉接觸,對于不同的活動實施分流計劃。結(jié)合活動人數(shù)、時間段以及活動類型等各項數(shù)據(jù),運用Topsis算法對不同的活動進行排序,提高活動的效率,實現(xiàn)資源利用率最大化,從而促進各類活動的有序進行。
關(guān)鍵詞:Topsis算法;疫情;分流
中圖分類號:TP311 文獻標識碼:A 文章編號:2096-4706(2021)18-0017-04
Abstract: In order to evaluate the travel risk degree of each region, a variety of data such as the surrounding risk percentage and the number of confirmed patients are selected as influencing factors, and Topsis algorithm is used to sort different regions according to the travel risk percentage. The outbreak of the epidemic pushed vaccination to a climax. In order to reduce the flow density and reduce personnel cross contact, split-flow plans are implemented for different activities. Combined with the data of the people number of activities, time period and type of activities, Topsis algorithm is used to sort different activities, improves the efficiency of activities and maximizes the utilization of resources, so as to promote the orderly progress of various activities.
Keywords: Topsis algorithm; epidemic situation; split-flow
0? 引? 言
當前,全球疫情形勢依然非常嚴峻,國外疫情持續(xù)蔓延,國內(nèi)疫情防控形勢嚴峻復雜,隨著季節(jié)因素疊加,容易引起疫情傳播擴散,國內(nèi)出現(xiàn)多點散發(fā)本土疫情,呈快速發(fā)展態(tài)勢?!胺酪咔f條,接種疫苗第一條”,在當前形勢下,全民核酸以及接種疫苗已經(jīng)成了常事,排隊接種疫苗或者進行集體活動的時候可能導致交叉感染,疫測小程序運用復雜的排隊算法,通過用戶預約的時間和地點,為用戶進行排號,同時,用戶出行時,可以查看沿路地區(qū)的出行風險百分比以及目的地出行風險百分比。
1? 項目介紹
在疫情暴發(fā)的形勢下,人們對接種疫苗以及核酸檢測的需求不斷增加。為解決群眾密集型交叉接觸、通宵“搶苗”現(xiàn)象等問題,我們團隊通過對Topsis算法的研究,對不同地區(qū)周邊的風險度以及周邊確診人數(shù)等多種指標進行分析,推出了逼近于理想值的排序方法的疫情監(jiān)控小程序——疫測。
用戶可以通過該小程序進行信息的錄入以及活動的申請,系統(tǒng)會根據(jù)多項數(shù)據(jù)運用Topsis算法對不同活動類型、不同時間段進行人員的分流,從而達到降低群眾交叉接觸的結(jié)果。我們?yōu)橛脩籼峁┮粋€線上咨詢有關(guān)疫情方面的法律、心理線上咨詢,在抗疫的同時,保障人民的權(quán)益與心理健康。結(jié)合周邊風險百分比以及確診人數(shù)等數(shù)據(jù)通過Topsis算法給出用戶接近理想值的出行風險百分比,當出行風險百分比達到特定值時,系統(tǒng)會給出預警提醒。
本產(chǎn)品是基于Topsis算法下的疫情監(jiān)控小程序——疫測,該小程序通過Topsis算法對活動人員進行排序,將活動人員進行分流,有效地控制了人群聚集,降低群眾的交叉接觸率。在用戶進行最新信息錄入后,擁有活動申請的權(quán)力,也可以在本產(chǎn)品上快速對周邊疫情的狀況進行查詢。通過實時定位,系統(tǒng)將根據(jù)人流量、當前地區(qū)的確診人數(shù)等多種數(shù)據(jù)為用戶提供半徑三公里范圍內(nèi)的出行風險百分比,當百分比達到特定值,系統(tǒng)將給出預警提示。
2? Topsis排序算法設(shè)計
2.1? 正則表達式爬取數(shù)據(jù)
由于大部分網(wǎng)站的疫情部分數(shù)據(jù)是可以在源代碼中查找到,檢查中是渲染后的代碼,但是要requests爬取網(wǎng)站訪問而得到的都是源代碼,需要右鍵查看源代碼才能看到爬取的完整數(shù)據(jù)。因此,xpath和BeautifulSoup都不適合操作源代碼中json格式的數(shù)據(jù),所以決定選用正則表達式來爬取數(shù)據(jù)。
通過導入Python自帶的re模塊,來爬取城市名稱、現(xiàn)存確診、累計確診、治愈、死亡、人口發(fā)布、溫度、濕度、人流量、疫苗接種數(shù)量等數(shù)據(jù),再將獲取的數(shù)據(jù)通過OpenBCI_MATLAB將數(shù)據(jù)流實時導入給MATLAB進行處理,實現(xiàn)MATLAB實時讀取數(shù)據(jù)流。
2.2? Topsis算法原理簡述
2.2.1? 原始矩陣正向化
假設(shè)由Python所爬取的所有影響疫情因素作為評價對象,通過這些評價對象來對疫情情況的高低進行不同的防控措施,即有n個評價對象,每個評價對象又含有m個參數(shù)指標。將n個評價對象的參數(shù)指標排列得到n×m矩陣。
2.2.2? 指標正向化處理
常見的四種指標如表1所示(即評價對象的m個參數(shù)指標所屬類型)。
為了后續(xù)處理方便,更好的計算疫情較為嚴重的地區(qū),更方便疫苗接種工作的安排,需要將所有類型的指標轉(zhuǎn)換為極大值指標,且需要將所有指標類型統(tǒng)一轉(zhuǎn)換為各自對應的正向指標。
2.2.3? 矩陣標準化
為了消除指標不同量綱的影響,需要對矩陣進行標準化后得到新的矩陣記為a,a中的每一個元素的計算方案為:
2.2.4? 結(jié)果歸一化
最后,我們可以計算每個參數(shù)對應的最大最小值,而最小值結(jié)合之前正向化的步驟可以得知,是一個零向量。則:
由于已將四種類型的指標轉(zhuǎn)換為極大型指標,可以認為,每個參數(shù)存在的最大值就是最優(yōu)解,每個參數(shù)存在的最小值就是最劣解。采用歐式距離計算每個方案在各個因素下的最優(yōu)距離與最劣距離,便可以定義出第 個方案的優(yōu)劣值,從而選取最優(yōu)方案:
3? 項目實施核心技術(shù)設(shè)計
3.1? 接口安全加密設(shè)計
登錄的時候采用統(tǒng)一網(wǎng)關(guān)認證,首先判斷請求是否為需要授權(quán)的請求,如果是則進行鑒權(quán),具有此權(quán)限,則放行請求,如果不具有此權(quán)限或者沒有請求密鑰則返回統(tǒng)一的失敗結(jié)果,流程如圖1所示,加密框架采用oauth2,加密載體采用JWT,他們二者結(jié)合是最適用于加密,鑒權(quán)無狀態(tài)的api請求:
AuthorizationServerConfigurerAdapter.java
@AllArgsConstructor
@Configuration
@EnableAuthorizationServer
public class Oauth2ServerConfig extends AuthorizationServerConfigurerAdapter {
private final PasswordEncoder passwordEncoder;
private final UserServiceImpl userDetailsService;
private final AuthenticationManager authentication Manager;
private final JwtTokenEnhancer jwtTokenEnhancer;
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("client-app")
.secret(passwordEncoder.encode("123456"))
.scopes("all")
.authorizedGrantTypes("password", "refresh_token")
.accessTokenValiditySeconds(3600)
.refreshTokenValiditySeconds(86400);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
List<TokenEnhancer> delegates = new ArrayList<>();
delegates.add(jwtTokenEnhancer);
delegates.add(accessTokenConverter());
enhancerChain.setTokenEnhancers(delegates); //配置JWT的內(nèi)容增強器
endpoints.authenticationManager(authenticationManager)
.userDetailsService(userDetailsService) //配置加載用戶信息的服務(wù)
.accessTokenConverter(accessTokenConverter())
.tokenEnhancer(enhancerChain);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.allowFormAuthenticationForClients();
}
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
jwtAccessTokenConverter.setKeyPair(keyPair());
return jwtAccessTokenConverter;
}
@Bean
public KeyPair keyPair() {
//從classpath下的證書中獲取秘鑰對
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("jwt.jks"), "123456".toCharArray());
return keyStoreKeyFactory.getKeyPair("jwt", "123456".toCharArray());
}
}
接口安全加密設(shè)計流程圖如圖1所示。
3.2? 消息中間件設(shè)計
此系統(tǒng)用了兩個消息中間件,一個是rocketmq,其是用于解決注冊流量大,并且充當?shù)谌浇涌诮怦畹淖饔?,另外一個是Kafka,其作用是用于日志消息的中間緩沖,避免日志采集轉(zhuǎn)換框架logstash壓力過大。
首先介紹rocketmq解決注冊發(fā)短信時用戶多流量大的問題,如果系統(tǒng)有很多用戶注冊,那勢必會導致tomcat會有很多線程堆積,且不能馬上發(fā)送注冊短信給用戶,非常浪費時間,這個時候我們?nèi)绻孟⒅虚g件的特點,注冊的時候把發(fā)送短信的請求先放到消息中間件,然后第三發(fā)發(fā)送短信的API再慢慢地進行發(fā)送,這樣就不會導致上述的問題了,且用戶體驗也會變好。
日志是對于一個系統(tǒng)來說是非常重要的,它可以記錄用戶的操作,用戶的行為,以及定位錯誤,而采用分布式架構(gòu)日志是一個非常麻煩的問題,日志需要統(tǒng)一收集管理,且由于日志信息量是巨大的,我們還要從日志中挖掘有價值的信息,所以綜合這些需求,我們采用多層次的結(jié)構(gòu)來收集管理挖掘日志信息,其中也利用Kafka來當作日志消息中間件,來減緩logstash的壓力。
4? 項目總結(jié)
4.1? 項目評價
針對當前疫情蔓延到全球、病毒變異株多發(fā)、外來輸入以及交叉感染等多種情況,一旦在較近的距離范圍發(fā)現(xiàn)患者,大到全市小到社區(qū)、學校、公司等都需要經(jīng)常核酸檢測進行排查,以及預約新冠疫苗第一、二針,這往往涉及排隊問題,我們的項目能夠更好地解決疫情期間排隊面臨的難點、痛點,將排隊的人群進行分流。同時,我們考慮到用戶在疫情期間心理可能會有些焦慮,因而有心理咨詢和法律咨詢。用戶在出行的時候可以查看三公里以內(nèi)的出行風險百分比,以及周邊的疫情情況來規(guī)劃自己的行程。
對于此項目,用戶的正面反饋達到90%,特別是在生活當中,用戶可以隨時隨地根據(jù)出行風險百分比進行行程規(guī)劃,使出行得到保障。極少數(shù)用戶反饋在報名排隊后重復提醒功能較少,從而錯過時間,造成無法及時參與已報名活動的結(jié)果??傮w來說,用戶對于此項目持有滿意態(tài)度。項目主界面如圖2所示。
4.2? 項目推廣
疫測小程序在降低交叉感染,合理安排排隊時間,從管理者的角度上看,能為管理者如社區(qū)、學校、公司等組織預約接種新冠疫苗、核酸檢測排隊分流,防止因接種人群過多引起的交叉感染,也能夠有效減少工作人員的工作量,能夠促進整個排隊過程較好的進行與管理。從用戶的角度上看,有效減少用戶排隊時間,能夠給用戶帶來方便,同時能夠讓用戶清楚地了解到出行風險。隨著疫測小程序功能得完善,在未來,如發(fā)生一些突發(fā)事件需要有序分流,它仍然是具有價值和意義的。
5? 結(jié)? 論
該項目以接種疫苗人流量資源為主要資本,研發(fā)開發(fā)的一款“基于Topsis算法的疫情防控APP”,此款APP可以通過大數(shù)據(jù)的收集以及Topsis算法的運用對大范圍乃至小范圍的進行監(jiān)測排序,用戶可以通過此款APP進行接種疫苗的預約排隊,后臺將會通過算法對從國家到省份再到區(qū)/縣這種順序進行排序,從而即刻反饋給用戶接種序號。本項目不僅僅能減緩民眾對疫情的恐慌情緒,也能增強用戶對目前防疫知識的了解、對防疫優(yōu)秀工作人員、事跡中精神的學習、更重要的是能借用信息時代的數(shù)據(jù)化監(jiān)測,處理由于疫情所產(chǎn)生的一些問題,并給予解決方案。
參考文獻:
[1] 胡劉康,王來軍,王寧,等.基于改進TOPSIS法的省際物流發(fā)展能力評價 [C]//世界交通運輸工程技術(shù)論壇(WTC2021)論文集(上).北京:人民交通出版社,2021:12.
[2] 北京機電工程研究所.結(jié)構(gòu)化新冠肺炎疫情預測和評估方法,裝置,設(shè)備及介質(zhì):CN202011204275.9 [P].2021-02-19.
[3] 練金.基于TOPSIS算法的艦艇多目標威脅評估 [J].艦船科學技術(shù),2020,42(22):64-66.
[4] 閆紅巖,李秦偉,劉明坤.密文數(shù)據(jù)庫系統(tǒng)應用程序接口的研究與設(shè)計 [J].貴州科學,2007(1):35-38.
[5] 天津職業(yè)技術(shù)師范大學(中國職業(yè)培訓指導教師進修中心).一種基于關(guān)鍵詞搜索時間序列的傳染病疫情預測與監(jiān)控系統(tǒng)、方法及其應用:CN202010131044.3 [P].2021-08-31.
作者簡介:張曉潔(2000.09—),女,漢族,廣東潮州人,本科在讀,研究方向:軟件工程;通訊作者:李晶(1987.01—),女,漢族,陜西商洛人,副教授,碩士,研究方向:軟件開發(fā),虛擬現(xiàn)實。