2022年江西省研究生数学建模竞赛冰壶运动求解全过程文档及程序
2022年江西省研究生數學建模競賽
冰壺運動
原題再現:
??2022年2月4日至20日我國成功舉辦了北京冬季奧運會,北京成為全球首個舉辦過夏季奧運會和冬季奧運會的“雙奧之城”。北京冬奧會共設置了7個大項,15個分項,109個小項,其中冰壺運動由于其趣味性,觀賞性,技術性和協作性成為廣受歡迎和關注的一個項目。冰壺是一種冰上投擲性運動項目,它起源于14世紀的蘇格蘭,1924年作為表演項目被納入第一屆冬奧會,1998年被列為冬奧會的正式比賽項目。
??冰壺由三個部分組成:壺體、手柄和螺栓。冰壺圓周約為91.44厘米,高度約為11.43厘米,質量約為19.96千克。比賽的標準場地長44.5米,寬4.32米,其中一端為本壘,畫有一個直徑為1.83米的圓作為球員的發球區;另一端為營壘,由4個直徑分別為0.15米、0.61米、1.22米和1.83米的同心圓組成。場地前后兩端各有一條藍色的實線,分別稱為前衛線和后衛線。冰壺擲出后,如果未通過前衛線或者超過后衛線都視作無效,將被清出場外。
??每場比賽兩隊參加,各派4個隊員上場,分為一壘、二壘、三壘、四壘,按順序依次交叉投壺,每局16壺,共進行10局。一名隊員投壺時,本隊兩名同伴可以在冰壺滑行前方用冰刷快速擦刷冰面,以控制冰壺的前進方向和速度。投壺方在力求將冰壺滑向圓心的同時,也可用冰壺將對方的冰壺撞出營壘或將場上本方的冰壺撞向營壘圓心。冰壺越過圓心線后,雙方僅有一名隊員可為己方的冰壺刷冰,且僅有主將可為對方的冰壺刷冰,以破壞對方戰術。
??請建立數學模型,完成以下任務:
??問題1 :在不刷冰的情況下,分別采取何種策略,實現以下目標:
??(1)當營壘中沒有冰壺時,使得冰壺停在營壘中。
??(2)當營壘中有一個對方的冰壺時,將對方的冰壺撞出營壘,自己的冰壺停在營壘中。
??(3)當營壘中有一個對方的冰壺時,將對方的冰壺撞出營壘,同時自己的冰壺一起出營壘。
??(4)當營壘中有兩個對方的冰壺時,將對方的兩個冰壺都撞出營壘,自己停在營壘中。
??(5)當營壘中有對方的冰壺,也有己方的冰壺時,將對方的冰壺撞出營壘,而己方的冰壺仍留在營壘中。
??問題2:考慮刷冰的情況,回答問題1中的幾個問題。
??問題3:如果營壘前方已有冰壺,重新研究問題1和問題2。
問題背景:
??冰壺(Curling)被譽為“冰上的國際象棋”, 起源于 16 世紀的蘇格蘭冰上投擲性運動, 迄今為止有約 500 年的歷史, 由于其趣味性, 觀賞性, 技術性和協作性成為本次北京冬季奧運會廣受歡迎和關注的一個項目。
模型的建立與求解:
??問題1要求在不考慮刷冰的情況下,確定能夠實現問題中多個目標的扔壺策略。為了描述卷曲的運動軌跡,建立了卷曲的進動模型、碰撞模型和均勻減速模型。然后,將問題中描述的情況分為多種投手投擲技術,并假設情況與問題描述相符。求解了假設條件下投手投擲的卷曲運動軌跡和初始位置、速度和角速度,并在四至五個問題中對投手投球位置進行了優化,使策略更加合理。
非旋轉勻減速直線模型
??當賽道中沒有其他冰壺運動時,考慮到冰壺運動沒有旋轉的理想情況,冰壺運動可以簡化為均勻減速模型。卷曲不旋轉時卷曲底部的平均摩擦系數為μa,因此卷曲運動阻力為:
全部論文縮略圖:
程序代碼:
clc; clear; close all; %% load obs obs = load('obsdata.txt'); numofobs = length(obs(:,1)); %% set up color map for display cmap = [1 1 1; ...% 1 - white - 空地0 0 0; ...% 2 - black - 障礙 1 0 0; ...% 3 - red - 已搜索過的地方0 0 1; ...% 4 - blue - 下次搜索備選中心 0 1 0; ...% 5 - green - 起始點1 1 0];...% 6 - yellow - 到目標點的路徑 colormap(cmap); map = zeros(25); % 設置障礙 for j=1:numofobsxobs(j) = obs(j,1);yobs(j) = obs(j,2);map(xobs(j),yobs(j)) = 2; end map(1,25) = 5; % 起始點 map(25,1) = 6; % 目標點 image(1.5,1.5,map); grid on; axis image; %% nrows = 25; ncols = 25; start_node = sub2ind(size(map), 1, 25); dest_node = sub2ind(size(map), 25, 1); % Initialize distance array distanceFromStart = Inf(nrows,ncols); distanceFromStart(start_node) = 0; % For each grid cell this array holds the index of its parent parent = zeros(nrows,ncols); t0=clock; % Main Loop while true % Draw current map map(start_node) = 5; map(dest_node) = 6; image(1.5, 1.5, map); grid on; axis image; drawnow; % Find the node with the minimum distance [min_dist, current] = min(distanceFromStart(:)); if ((current == dest_node) || isinf(min_dist)) break; end; map(current) = 3; distanceFromStart(current) = Inf; [i, j] = ind2sub(size(distanceFromStart), current);neighbor = [i-1,j;... i+1,j;... i,j+1;... i,j-1] outRangetest = (neighbor(:,1)<1) + (neighbor(:,1)>nrows) +...(neighbor(:,2)<1) + (neighbor(:,2)>ncols ) locate = find(outRangetest>0); neighbor(locate,:)=[] neighborIndex = sub2ind(size(map),neighbor(:,1),neighbor(:,2)) for i=1:length(neighborIndex) if (map(neighborIndex(i))~=2) && (map(neighborIndex(i))~=3 && map(neighborIndex(i))~= 5) map(neighborIndex(i)) = 4; if distanceFromStart(neighborIndex(i))> min_dist + 1 distanceFromStart(neighborIndex(i)) = min_dist+1; parent(neighborIndex(i)) = current; end end end end TimeCost=etime(clock,t0) %% if (isinf(distanceFromStart(dest_node))) route = []; else %提取路線坐標route = [dest_node]; while (parent(route(1)) ~= 0) route = [parent(route(1)), route]; end % 動態顯示出路線 for k = 2:length(route) - 1 map(route(k)) = 7; pause(0.1); image(1.5, 1.5, map); grid on; axis image; end end axis off;全部論文及程序請見下方“ 只會建模 QQ名片” 點擊QQ名片即可
總結
以上是生活随笔為你收集整理的2022年江西省研究生数学建模竞赛冰壶运动求解全过程文档及程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NHibernate 异常及解决办法(长
- 下一篇: 根据年月日计算是星期几的函数,基姆拉尔森