
1. 项目概述从一道赛题看海洋测绘的工程实践去年带学生打数模B题“多波束测线问题”一出来我们团队就意识到这绝不是一个纯数学问题它背后是实打实的海洋测绘工程难题。简单来说这道题模拟的是科考船搭载多波束测深系统在一片矩形海域进行“犁地式”测量目标是设计测线即船的航行路线用最少的航程、最高的效率把海底地形测清楚还不能有遗漏。听起来像扫地机器人规划路径但复杂得多因为测深仪不是单点测量它向海底发射一个扇面声波一次能扫出一条带状区域测幅而且这个测幅宽度会随着水深变化。这就引出了核心矛盾你想测快点船就得开快点、测线间距拉大点但测线间距太大两条测线扫过的区域中间可能就有“漏测”的缝隙你想测全就得加密测线但航程和时间成本就上去了。这道题的精髓就在于如何在“全覆盖”的硬约束下找到那个总航程最短的“最优解”。对于数学建模新手这是接触运筹优化、几何计算和工程问题结合的绝佳案例对于有经验的选手则是检验将复杂物理模型抽象为数学模型的试金石。接下来我就结合我们当时的解题思路和后续的复盘把这道题的“里子”和“面子”都拆开揉碎了讲清楚并附上经过实战检验的参考代码框架。2. 问题核心与数学模型构建2.1 关键概念与物理模型解析要建好模先得吃透物理设备是怎么工作的。多波束测深系统的核心原理是声学测距与几何关系。船底有一个换能器阵列向垂直于航向的两侧海底发射扇形声波束。这个“扇面”在海底的投影就是一个以船底正下方点为顶点的等腰梯形在平坦海底假设下近似为矩形条带。这里有几个决定模型的关键参数覆盖宽度 (Swath Width, W)这是单次测量能覆盖的海底宽度。题目中通常会给出它与水深(D)的关系例如W 2 * D * tan(θ)其中θ是波束开角的一半。这是整个问题动态性的根源。水深一变覆盖宽度就变。在斜坡海底船正下方的水深和边缘的水深不同导致覆盖宽度计算复杂化。测线间距 (Line Spacing, ΔL)相邻两条平行测线之间的距离。我们的核心决策变量之一。它必须小于等于有效覆盖宽度才能保证不漏测。但“有效覆盖宽度”不是简单的W因为要考虑重叠率。重叠率 (Overlap Rate, η)为了保证测量精度和应对姿态波动船会摇晃相邻测幅之间需要有一定的重叠。通常要求重叠部分占单侧波束宽度的比例不低于某个值如10%。这意味着实际能用来计算最大允许测线间距的是W_effective W * (1 - η)。坡度角 (Slope Angle, α)海底不是平的。坡度会显著影响测量几何。当海底有坡度时声波束到达海底不同位置的路径长度即斜距不同导致计算出的水深和水平位置都需要进行倾斜校正。更重要的是坡度会导致测幅在坡上方变窄在坡下方变宽打破了对称性。注意很多初次接触的同学会忽略重叠率直接用理论覆盖宽度去计算间距这在实际工程中是不允许的会导致在船体晃动或定位误差时出现漏测带。2.2 从物理世界到数学方程我们的目标是最小化总航程。假设测量区域是长为L宽为W_zone的矩形。我们采用最常见的“之字形”Zigzag测线规划即一系列平行的测线辅以连接它们的转弯路径。设测线方向平行于区域的长边L。需要规划的测线条数为N。那么总航程S_total主要包含两部分测量航程 (S_survey)N * L。这是所有测线长度的总和。转弯航程 (S_turn)(N - 1) * S_one_turn。这是在每条测线末端船掉头到相邻测线起点所走的路径。S_one_turn与船的转弯半径、测线间距ΔL有关。对于大型科考船转弯半径不能忽略通常采用“U”形或“Ω”形转弯其路径长度可以近似为π * R ΔLR为转弯半径或通过更精确的几何模型计算。因此总航程模型为Minimize S_total N * L (N - 1) * S_one_turn(ΔL, R)约束条件全覆盖约束这是铁律。对于任意位置至少被一条测线的波束覆盖到。在平行测线规划下这要求ΔL ≤ W_effective(D(x, y))。难点在于W_effective是随位置(x,y)变化的水深D的函数。如果海底平坦水深恒定那很简单ΔL取一个常数即可。但如果有坡度D沿着测线方向和垂直测线方向都在变化W_effective也随之变化这就要求我们的ΔL必须小于整个区域内最窄处的有效覆盖宽度否则在那个位置就会漏测。即ΔL ≤ min{ W_effective(D(x,y)) | for all (x,y) in zone }。重叠率约束已隐含在W_effective的定义中。边界约束测线需要覆盖整个区域宽度W_zone。这决定了测线条数N与测线间距ΔL的关系(N - 1) * ΔL ≥ W_zone。通常为了简化会让测线覆盖范围略大于区域宽度即(N - 1) * ΔL W_zone margin其中margin是一个小的余量。整数约束N必须为正整数。2.3 模型分类与解题策略选择面对这个模型解题路径取决于题目给出的海底地形复杂度场景一平坦海底恒定水深这是最简单的情况。水深D为常数因此覆盖宽度W和有效覆盖宽度W_eff也是常数。最优解非常直观在满足全覆盖的前提下尽可能增大测线间距ΔL以减少测线条数N。因为S_one_turn通常随ΔL增大而缓慢增大但N的减少能显著降低N*L这项主要成本。所以最优ΔL* W_eff。然后根据ΔL*和区域宽度W_zone计算N向上取整总航程即可算出。这种情况下问题退化为一个简单的算术问题重点在于模型表述的严谨性和计算精度。场景二斜坡海底线性变化水深这是2023年B题的核心难点也是区分度所在。水深沿某一方向假设为y轴垂直于测线方向线性变化即D(y) D0 k * y。其中D0是基准水深k是坡度有正负。 此时有效覆盖宽度W_eff(y) 2 * (D0 k*y) * tan(θ) * (1-η)它随y线性变化。最窄处出现在水深最浅的地方假设k0则最浅处在y0处。为了确保全覆盖我们必须取最窄处的宽度作为全局允许的最大测线间距即ΔL ≤ W_eff(y_min)。这会导致在水深较深的地方相邻测幅之间产生大量的冗余重叠测量效率降低。如何优化思路是既然不同位置需要的间距不同能否不用固定的ΔL这就引出了“变间距”测线规划的优化思路。但“之字形”平行测线要求间距固定。一个更工程化的方法是“旋转测线法”。即不让测线平行于区域长边而是让测线与水深变化方向等深线成一个角度。这样单条测线会穿越不同水深区域其单次测量的覆盖宽度是一个平均值。通过优化这个旋转角可能找到一个方向使得整个区域所需的最大最小间距比固定平行测线时更优从而减少总航程。这需要建立旋转后的几何关系将ΔL和旋转角β都作为决策变量进行二维优化。场景三复杂地形已知离散水深点题目可能给出一个网格化的水深数据文件D(x_i, y_j)。这时没有解析表达式。全覆盖约束要求对于规划出的每条测线计算其中心线位置然后对于该测线覆盖范围内的所有网格点其到该测线的垂直距离必须小于该点处的半有效覆盖宽度W_eff/2。这是一个更复杂的约束校验过程。优化算法上通常采用启发式算法如遗传算法、模拟退火等来搜索测线起点、角度、间距或直接搜索各测线位置并以总航程最短为目标以满足全覆盖为约束。我们当时面对的是场景二斜坡海底并选择了旋转测线法作为核心优化策略。下面详述求解过程。3. 斜坡海底情景下的模型求解与算法实现3.1 旋转测线模型的建立设矩形区域坐标系x轴平行于原长边Ly轴平行于原短边W_zone。水深沿y方向线性变化D(y) D0 k * y0 ≤ y ≤ W_zone。 我们计划让测线与x轴原长边成一个角度β进行布设。测线本身是平行的间距为ΔL这个间距是指垂直于测线方向的距离。关键推导如何表达全覆盖约束将区域内的任意点(x, y)转换到以测线方向为轴的坐标系(u, v)。其中u轴沿测线方向v轴垂直于测线方向。变换公式为u x*cosβ y*sinβ v -x*sinβ y*cosβ在(u, v)坐标系下测线是平行于u轴的直线其方程为v v_iv_i是第i条测线的v坐标。相邻测线的v坐标差为ΔL。点(x, y)到其最近测线的垂直距离就是|v - v_i|。要满足全覆盖要求|v - v_i| ≤ W_eff(D(x,y)) / 2。由于D是y的函数而y又通过(x,y)与(u,v)关联所以W_eff是(u,v)的函数。这使得约束非常复杂。简化与近似处理 为了模型可解我们做一个重要近似对于一条位于v v_i的测线其覆盖范围在v方向上的宽度由该测线中心点所对应的水深决定。也就是说我们假设一条测线的覆盖宽度在其整个长度上是均匀的等于其中心点(y_center)处的水深计算出的宽度。这个近似在坡度不大、测线长度相对于水深变化尺度不大时是合理的。 那么对于中心点y坐标为y_i的测线其有效覆盖宽度为W_eff_i 2 * (D0 k * y_i) * tanθ * (1-η)。约束转化 在旋转β角后区域的“宽度”在v轴方向上的投影长度W_v不再是W_zone而是W_zone / |cosβ|当β较小时或更精确地计算为区域四个顶点转换后的v坐标极差。 测线需要覆盖这个v方向的范围。为了保证任意位置被覆盖相邻测线的间距ΔL必须小于等于所有测线中最小的W_eff_i。即ΔL ≤ min{ W_eff_i for all i }而y_i本身又由测线的布置决定与ΔL和β有关。这就形成了一个耦合的优化问题。目标函数 总航程S_total N * L_actual (N-1) * S_turn。L_actual单条测线的实际长度。在旋转后测线长度是区域在u方向上的投影长度约为L / |cosβ|当β较小时。N测线条数。N ceil( W_v / ΔL ) 1考虑边界通常加一条或一个余量。S_turn转弯长度。在旋转情况下转弯路径可能更复杂但可以近似认为与ΔL / sinβ有关因为测线在原始y方向的投影间距决定了转弯的横向移动距离。一个常用的简化是忽略转弯半径认为转弯路径为2 * ΔL / sinβ一个锐角转弯的“之”字折线。至此我们得到了决策变量为(β, ΔL)的优化模型Minimize S_total(β, ΔL) Subject to: ΔL ≤ W_eff_i(β, ΔL) for all i (覆盖约束) ΔL 0, β in (-π/2, π/2) 范围约束这是一个非线性约束优化问题解析解很难求通常采用数值方法求解。3.2 求解算法搜索与迭代我们采用了双重循环搜索法因为变量只有两个搜索空间不大且函数计算不复杂。离散化角度β在合理范围内如 -60° 到 60°以一定步长如1°生成一系列β值。对于每个固定的β a. 计算区域在v方向的跨度W_v。 b. 理论上最优的ΔL应该取满足全覆盖约束的最大可能值即ΔL_max(β) min{ W_eff_i }。但W_eff_i依赖于测线位置y_i而y_i又依赖于ΔL。这里我们采用迭代法 i. 假设一个初始ΔL例如用平均水深计算的宽度。 ii. 根据ΔL和W_v布置测线得到每条测线的中心点y坐标y_i。 iii. 计算每条测线的W_eff_i找出最小值W_eff_min。 iv. 比较ΔL和W_eff_min。如果ΔL W_eff_min说明间距太大会出现漏测令ΔL W_eff_min如果ΔL W_eff_min说明间距可以适当增大以减少测线数但增大会改变y_i需要重新计算。这个过程可以迭代几次直到收敛或者更简单地直接取ΔL W_eff_min作为该β下的可行最大间距。 c. 用收敛后的ΔL计算测线条数N、总测量长度N * L_actual和总转弯长度(N-1) * S_turn(β, ΔL)得到该β下的总航程S_total(β)。遍历所有β找到使S_total(β)最小的β*及其对应的ΔL*。实操心得在迭代计算ΔL_max(β)时我们发现对于线性斜坡最窄覆盖宽度总是出现在最上方水深最浅处的测线。因此可以简化计算ΔL_max(β) W_eff(y_top)其中y_top是最上方那条测线中心点的y坐标。这省去了遍历所有测线求最小值的步骤大大加快了搜索速度。但需要注意这个结论依赖于“测线平行且等距”以及“水深线性变化”的假设。3.3 参考代码框架与关键片段以下是用Python实现上述搜索算法的核心框架。注意为了清晰省略了部分绘图和数据输出的代码。import numpy as np import matplotlib.pyplot as plt def calculate_total_voyage(beta_deg, D0, k, W_zone, L, theta_deg, overlap_rate0.1, turn_radius0): 计算给定旋转角beta下的总航程。 参数 beta_deg: 测线旋转角度度 D0: 基准水深y0处 k: 坡度 (水深变化率) W_zone: 区域宽度y方向 L: 区域长度x方向 theta_deg: 波束半开角度 overlap_rate: 要求的最小重叠率 turn_radius: 船舶转弯半径简化模型假设为0则用折线模型 返回 total_distance: 总航程 delta_L: 采用的测线间距 N: 测线条数 # 转换为弧度 beta np.deg2rad(beta_deg) theta np.deg2rad(theta_deg) # 1. 计算旋转后区域在v方向上的跨度 (垂直于测线的方向) # 矩形区域四个角点 corners np.array([[0,0], [L,0], [L, W_zone], [0, W_zone]]) # 旋转到(u,v)坐标系 u corners[:,0] * np.cos(beta) corners[:,1] * np.sin(beta) v -corners[:,0] * np.sin(beta) corners[:,1] * np.cos(beta) v_min, v_max v.min(), v.max() W_v v_max - v_min # 2. 计算最上方测线中心点的y坐标对应最小水深 # 最上方测线的v坐标v_top v_max - delta_L/2 这里需要迭代先假设一个delta_L # 简化先估计一个初始delta_L用平均水深 D_avg D0 k * W_zone / 2 W_eff_avg 2 * D_avg * np.tan(theta) * (1 - overlap_rate) delta_L_guess W_eff_avg # 迭代求解可行的最大delta_L delta_L delta_L_guess for _ in range(5): # 迭代5次通常足够收敛 # 计算测线条数向上取整 N int(np.ceil(W_v / delta_L)) 1 # 加1条保证覆盖边界 # 计算每条测线的v坐标中心 v_centers np.linspace(v_min delta_L/2, v_max - delta_L/2, N) # 将v坐标转回y坐标需要用到x坐标吗对于中心点可以取x的平均值L/2 # 从(v, beta)和固定的u取L/2旋转后的值反算y u_center (L/2) * np.cos(beta) (W_zone/2) * np.sin(beta) # 取区域中心点的u作为代表 # 反变换: [x; y] R^{-1} [u; v] R^T [u; v] 因为旋转矩阵是正交的 x_centers u_center * np.cos(beta) - v_centers * np.sin(beta) y_centers u_center * np.sin(beta) v_centers * np.cos(beta) # 计算每条测线中心点处的水深和有效覆盖宽度 D_centers D0 k * y_centers W_eff_centers 2 * D_centers * np.tan(theta) * (1 - overlap_rate) # 找出最小的有效覆盖宽度 W_eff_min W_eff_centers.min() # 更新delta_L if delta_L W_eff_min: delta_L W_eff_min * 0.98 # 留2%余量确保绝对覆盖 else: # 如果当前delta_L小于最小宽度可以保持但为了最大化效率我们取最小宽度 delta_L W_eff_min * 0.98 break # 通常一次迭代后就会取到最小宽度 # 3. 用最终的delta_L重新计算测线条数N N int(np.ceil(W_v / delta_L)) 1 v_centers np.linspace(v_min delta_L/2, v_max - delta_L/2, N) # 4. 计算总航程 # 测量航程单条测线长度u方向跨度 u_min, u_max u.min(), u.max() L_actual u_max - u_min survey_distance N * L_actual # 转弯航程简化模型假设为“之”字形折线转弯每段转弯长度约为 2*delta_L/sin(beta) # 避免beta接近0时除零 if abs(beta) np.deg2rad(1): turn_distance_per 2 * turn_radius if turn_radius 0 else 0 # 小角度时近似为0或转弯半径 else: turn_distance_per 2 * delta_L / np.sin(abs(beta)) turn_distance (N - 1) * turn_distance_per total_distance survey_distance turn_distance return total_distance, delta_L, N def main(): # 输入参数示例需根据题目具体数据修改 D0 120.0 # 基准水深 (m) k 0.125 # 坡度 (水深变化率, m/m) W_zone 4.0 * 1852 # 区域宽度4海里转换为米 (1海里1852米) L 5.0 * 1852 # 区域长度5海里转换为米 theta_deg 60 # 波束开角为120度半开角为60度 overlap_rate 0.1 # 10%重叠率 # 搜索最优旋转角 beta_range np.arange(-60, 61, 1) # 从-60度到60度步长1度 best_distance float(inf) best_beta 0 best_delta_L 0 best_N 0 results [] for beta in beta_range: dist, dL, N_lines calculate_total_voyage(beta, D0, k, W_zone, L, theta_deg, overlap_rate) results.append((beta, dist, dL, N_lines)) if dist best_distance: best_distance dist best_beta beta best_delta_L dL best_N N_lines print(f最优旋转角: {best_beta:.1f} 度) print(f对应测线间距: {best_delta_L:.2f} 米) print(f测线条数: {best_N}) print(f预估总航程: {best_distance/1852:.2f} 海里) # 转换回海里输出 # 绘制总航程随角度变化曲线 betas, dists, _, _ zip(*results) plt.figure(figsize(10,5)) plt.plot(betas, [d/1852 for d in dists], b-, linewidth2) plt.plot(best_beta, best_distance/1852, ro, markersize10, labelfOptimal: {best_beta:.1f}°) plt.xlabel(测线旋转角度 (度)) plt.ylabel(总航程 (海里)) plt.title(总航程 vs 测线旋转角度) plt.grid(True, linestyle--, alpha0.7) plt.legend() plt.tight_layout() plt.show() # 可以进一步绘制最优角度下的测线布置图 # ... (绘图代码略) if __name__ __main__: main()这段代码提供了一个完整的求解框架。calculate_total_voyage函数是核心它实现了对于给定旋转角β计算可行最大间距和总航程的逻辑。主函数main则通过遍历β来寻找最优解。4. 模型拓展、优化与常见陷阱4.1 更精细的模型考量上述模型是基础版本。在实际竞赛或工程中可以考虑以下拓展让模型更精细、结果更可靠非零转弯半径模型大型船只转弯需要空间。转弯航程S_turn不能用简单的折线近似。一个更真实的模型是假设船只以恒定转弯半径R做圆弧转弯连接两条平行的测线。这需要求解几何切线计算转弯路径长度。这会使S_turn成为ΔL和R的复杂函数可能影响最优β的选择。在优化时如果R较大可能倾向于选择更小的β以减少横向移动距离ΔL / sinβ从而减少转弯路径长度。重叠率的精确计算我们之前将重叠率简单地用于缩小有效覆盖宽度。更精确的做法是对于相邻两条测线计算它们各自覆盖范围的边界然后检查其重叠部分的宽度是否满足要求的最小重叠比例。这需要在每条测线的每个点上进行校验计算量较大但结果更精确。坡度引起的覆盖畸变校正当海底有坡度时波束脚印声波照射到的海底区域会发生畸变不再是简单的等腰梯形。在斜坡上上坡侧的波束会拉长下坡侧的波束会缩短。这需要根据声线追踪原理进行校正修正后的覆盖宽度公式会包含坡度角α。例如有效覆盖宽度可能变为W_eff D * [tan(θα) tan(θ-α)] * (1-η)假设坡度沿测线垂直方向。这会使得在坡上方覆盖宽度更窄约束更强。多目标优化除了总航程最短有时还需考虑其他因素如测量时间与航速有关、能耗、或测量数据的均匀性。可以引入多目标优化例如帕累托前沿分析在航程和数据质量之间寻求平衡。4.2 算法优化与加速技巧当问题规模变大如复杂地形下的多测线优化时穷举搜索可能效率低下。可以考虑以下方法梯度下降或牛顿法如果我们能推导出总航程S_total(β, ΔL)关于β和ΔL的梯度即使近似可以使用更高效的优化算法。但对于包含取整函数ceil()和迭代过程的模型梯度可能不连续或难以求解。智能优化算法对于场景三复杂地形决策变量可能是各条测线的位置而非简单的间距和角度。此时变量空间是高维的。遗传算法GA、粒子群算法PSO或模拟退火SA非常适合这类问题。可以将每条测线的起始点坐标或偏移量编码为染色体以适应度函数总航程的倒数并加上对漏测区域的惩罚项来驱动进化。分步优化策略先固定角度β优化测线位置一个一维布局问题再优化角度β。或者先进行粗搜索大步长定位最优区域再进行精细搜索小步长。4.3 常见问题、调试技巧与避坑指南在实现和调试模型时我们遇到了不少坑这里总结出来希望能帮你节省时间单位混乱这是最致命的错误。题目中海域尺寸常用“海里”水深和覆盖宽度用“米”坡度是“度”或“弧度”。代码中必须统一单位建议全部转换为米和弧度。特别注意三角函数输入必须是弧度。我们的做法是所有输入参数立即转换为SI单位米弧度内部计算全部使用SI单位最终输出时再根据需要转换回海里。迭代不收敛或陷入死循环在计算ΔL_max(β)的迭代中如果逻辑不当可能无法收敛。我们的经验是设置最大迭代次数如10次并采用“松弛因子”。例如更新规则不是直接令ΔL W_eff_min而是ΔL_new 0.98 * W_eff_min留2%安全余量并且如果新旧ΔL变化小于某个阈值就跳出循环。边界处理错误计算测线条数N ceil(W_v / ΔL)时要确保测线覆盖的范围略大于W_v。通常的做法是N ceil(W_v / ΔL) 1或者N floor(W_v / ΔL) 2然后让第一条和最后一条测线的中心位于边界内侧ΔL/2处。务必绘制出测线图进行视觉验证检查四个角点是否都被覆盖。忽略转弯航程的影响在坡度不大的情况下最优β往往在0度附近即测线平行于长边。因为旋转测线虽然可能允许稍大的ΔL但会显著增加单条测线长度L_actual和转弯距离。我们的搜索结果显示总航程曲线通常在0度处有最小值。如果算出的最优β绝对值很大如超过30度一定要检查转弯航程的计算公式是否正确很可能低估了转弯成本。模型假设与现实的差距要清醒认识到模型假设如平坦海底、线性斜坡、忽略洋流和风浪带来的误差。在论文中必须讨论这些假设的合理性及其对结果可能的影响。例如可以做一个敏感性分析改变坡度k、重叠率η、转弯半径R观察最优解和总航程的变化趋势。这能极大提升论文的深度和可信度。代码验证技巧特例验证设置坡度为0平坦海底检查模型是否退化为你期望的简单情况ΔL W_effβ0最优。对称性验证如果区域是正方形坡度方向反转结果应该具有对称性。可视化验证务必编写绘图代码将最优布设的测线画在区域图上并用阴影标出每条测线的覆盖范围直观检查是否有漏测和重叠是否满足。这是发现逻辑错误最有效的方法。5. 论文写作要点与结果分析框架数学建模竞赛三分靠模型七分靠表达。一个清晰的论文结构能让你的思路脱颖而出。问题重述与分析不要照抄题目。用你自己的话提炼出问题的核心要素决策变量、目标、约束、关键挑战覆盖宽度随水深变化和优化本质在覆盖约束下最小化路径。模型假设与符号说明明确列出所有假设如海底坡度均匀、船速恒定、忽略洋流等并给出清晰的符号表。假设要合理且必要。模型建立这是核心章节。建议分小节5.1 覆盖宽度模型推导W_eff与水深D、坡度α、波束角θ的关系。5.2 测线规划通用模型建立以总航程最小为目标以全覆盖为核心约束的优化模型框架。5.3 平坦海底情景下的简化与求解可作为对比基准。5.4 斜坡海底情景下的旋转测线模型详细推导坐标变换、间距约束转化、目标函数表达。这是你论文的亮点。模型求解描述你采用的算法如双重循环搜索法。包括搜索范围、步长、迭代收敛条件。给出算法流程图可以手绘拍照清晰插入。附上关键代码片段如核心函数但不要贴全部代码。结果分析与讨论数据结果以表格形式清晰呈现不同方案如β0固定测线、最优旋转测线下的ΔL、N、总航程。计算相对于基准方案β0的航程节省百分比。敏感性分析改变关键参数坡度k、重叠率η观察最优旋转角β*和总航程如何变化并用图表展示。分析其物理意义如坡度越大旋转优化收益可能越明显。模型检验通过可视化图形展示最优布设方案下的测线覆盖图直观证明全覆盖约束得到满足。模型评价与推广客观评价模型的优点如概念清晰、求解稳定和缺点如忽略了转弯半径、假设坡度均匀。提出可能的改进方向如引入非平行测线、考虑复杂地形。结论简洁总结你的主要工作、核心方法和关键发现。例如“针对多波束测线优化问题本文建立了基于旋转测线法的非线性规划模型通过数值搜索求解。结果表明在给定斜坡海底条件下采用XX度的旋转角布设测线可比传统平行布设节省约XX%的航程。”最后保持论文排版整洁图表清晰且有自明性每个图都有标题和必要的图例。附录里可以放上完整的程序代码。这道B题是一个经典的工程优化问题其价值不仅在于答案本身更在于展示你如何将一个模糊的实际问题一步步抽象、简化、建模、求解并分析的全过程。把这个过程想明白、写清楚才是数模竞赛取胜的关键。