模块七:分析与权衡
如何在 SysML v2 中定义分析案例、评估设计备选方案,以及通过权衡研究做出可追溯的工程决策。
KerML → SysML:分析与权衡概念对应关系
SysML v2 的分析建模建立在 KerML 的 Feature、Expression 和 Classifier 机制之上。分析案例、计算和权衡研究都是 SysML L2 对这些 L1 核心构件的领域特化。
| SysML v2 概念(L2) | 底层 KerML 构件(L1) | SysML 额外添加了什么 |
|---|---|---|
analysis case def | CaseDefinition(特化自 CalculationDefinition) | 结构化的分析框架:主题、输入参数、求解步骤和返回结果 |
analysis case(用法) | 由 CaseDefinition 类型化的 Feature | 在特定上下文中实例化分析,绑定具体设计参数 |
calc def | Function(KerML Core 层) | 可复用的数学函数;返回一个计算结果值 |
calc(用法) | 由 Function 类型化的 Feature | 在分析或约束中调用计算定义 |
constraint def | Predicate(返回 Boolean 的 Function) | 断言设计必须满足的条件;用于验证和优化 |
objective | RequirementUsage(在 CaseDefinition 中) | 声明分析的目标函数或优化方向 |
subject | SubjectMembership | 指定分析针对的系统或组件 |
return | ResultExpressionMembership | 分析案例的最终输出值 |
在 KerML 中,Function 是一种特化的 Behavior,具有返回值。Predicate 进一步特化 Function,返回 Boolean。SysML v2 的 calc def 和 constraint def 分别映射到这两个构件,为工程分析提供了类型安全的数学建模基础。
分析案例概述
KerML 来源:analysis case def → CaseDefinition(特化自 CalculationDefinition)
分析案例(analysis case)是 SysML v2 中用于组织工程分析的核心结构。它将分析的输入、求解步骤和输出结果封装为一个可复用、可追溯的单元。与动作(action)描述系统行为不同,分析案例描述的是工程师对设计的评估过程。
分析案例就像实验室里的实验方案:它规定了实验对象(subject)、输入变量、实验步骤和预期结果。每次用不同参数运行这个方案,就得到一组新的实验数据。
分析案例的基本结构
一个分析案例包含四个关键要素:subject(分析主题)、输入参数、计算步骤和 return(返回结果):
1 analysis case def MassAnalysis {
2 subject vehicle : Vehicle; // 分析主题:被分析的系统
3 in attribute payload : ISQ::MassValue; // 输入参数
4
5 // 计算步骤
6 calc totalMass : MassRollup {
7 in dryMass = vehicle.dryMass;
8 in fuelMass = vehicle.fuelMass;
9 in payload = payload;
10 }
11
12 return totalMass.result; // 返回计算结果
13 }
analysis case def 是定义层面的模板,analysis case 是用法层面的实例。这与 part def/part、action def/action 的模式完全一致——SysML v2 中「定义/用法」的分离贯穿所有领域。
在模型中实例化分析
1 part vehicle1 : Vehicle {
2 attribute dryMass = 1200[kg];
3 attribute fuelMass = 300[kg];
4 }
5
6 // 用具体值实例化分析案例
7 analysis case massCheck : MassAnalysis {
8 subject vehicle1;
9 in payload = 500[kg];
10 }
分析动作与计算
KerML 来源:calc def → Function(Core 层);calc → 由 Function 类型化的 Feature
计算定义(calc def)是 SysML v2 中可复用的数学函数。与 action def 不同,计算定义必须有返回值——它映射到 KerML 的 Function,而非一般的 Behavior。计算可以在分析案例、约束和其他计算中被调用。
定义计算
1 calc def MassRollup {
2 in dryMass : ISQ::MassValue; // 结构质量
3 in fuelMass : ISQ::MassValue; // 燃油质量
4 in payload : ISQ::MassValue; // 载荷质量
5 return result : ISQ::MassValue = dryMass + fuelMass + payload;
6 }
组合多个计算
计算可以相互调用,形成计算链。这是将复杂分析分解为可复用模块的关键手段:
1 calc def ThrustToWeight {
2 in thrust : ISQ::ForceValue; // 推力
3 in totalMass : ISQ::MassValue; // 总质量
4 in g : ISQ::AccelerationValue = 9.81[m/s^2];
5 return ratio : Real = thrust / (totalMass * g);
6 }
7
8 calc def PerformanceScore {
9 in thrust : ISQ::ForceValue;
10 in totalMass : ISQ::MassValue;
11 in range : ISQ::LengthValue; // 航程
12
13 // 调用另一个计算
14 calc twr : ThrustToWeight {
15 in thrust = thrust;
16 in totalMass = totalMass;
17 }
18
19 return score : Real = 0.6 * twr.ratio + 0.4 * (range / 1000[km]);
20 }
calc def 与 action def 的核心区别:计算定义必须有 return 结果,且通常是无副作用的纯函数。动作定义则描述有时间跨度的行为过程。在分析场景中,优先使用 calc def 建模数学关系。
约束与目标函数
KerML 来源:constraint def → Predicate(返回 Boolean 的 Function);objective → RequirementUsage
约束(constraint)是断言设计必须满足的条件的布尔谓词。在分析案例中,约束用于定义可行域——只有满足所有约束的设计方案才是有效的。目标(objective)则指定分析要优化的方向。
约束定义
1 constraint def MassLimit {
2 in totalMass : ISQ::MassValue;
3 in maxMass : ISQ::MassValue;
4 totalMass <= maxMass // 总质量不得超过上限
5 }
6
7 constraint def ThrustConstraint {
8 in twr : Real; // 推重比
9 twr >= 1.2 // 推重比不得低于 1.2
10 }
在分析中使用约束
约束可以在分析案例中通过 assert constraint 声明为必须成立的条件:
1 analysis case def FeasibilityCheck {
2 subject vehicle : Vehicle;
3
4 calc mass : MassRollup { /* ... */ }
5 calc twr : ThrustToWeight { /* ... */ }
6
7 // 断言约束:设计必须满足这些条件
8 assert constraint massOk : MassLimit {
9 in totalMass = mass.result;
10 in maxMass = 2500[kg];
11 }
12
13 assert constraint thrustOk : ThrustConstraint {
14 in twr = twr.ratio;
15 }
16 }
目标函数
objective 声明分析案例要达成的目标。它是一种特殊的需求用法,通常包含优化方向(最大化或最小化):
1 analysis case def DesignOptimization {
2 subject vehicle : Vehicle;
3
4 objective maxRange {
5 doc /* 在满足所有约束的前提下,最大化航程 */
6 require constraint massOk : MassLimit;
7 maximize rangeCalc.result;
8 }
9
10 calc rangeCalc : RangeEstimate { /* ... */ }
11 }
不要将 constraint 与 requirement 混淆。constraint 是可求值的布尔表达式(映射到 Predicate),用于数学验证。requirement 是可追溯的利益相关者需求,可以包含约束但也包含文本描述和验证关系。在分析案例中使用 constraint 定义可行域。
权衡研究
KerML 来源:权衡研究是分析案例的特化应用,利用多个分析案例实例比较设计备选方案
权衡研究(trade study)是系统工程中最核心的决策工具之一。在 SysML v2 中,权衡研究通过对多个设计备选方案运行相同的分析案例,然后比较结果来实现。这使决策过程完全可追溯、可重复。
权衡研究就像购车时的对比评测:你列出评价指标(油耗、空间、价格),给每个指标分配权重,然后对每款候选车型逐项打分,最后加权求和得出总分。SysML v2 让你在模型中将这个过程形式化。
定义备选方案
每个备选方案是同一部件定义的不同变体配置:
1 part def PropulsionSystem {
2 attribute thrust : ISQ::ForceValue;
3 attribute mass : ISQ::MassValue;
4 attribute cost : Real; // 单位成本(万元)
5 attribute fuelEff : Real; // 燃油效率(km/L)
6 }
7
8 // 备选方案 A:大推力引擎
9 part optionA : PropulsionSystem {
10 :>> thrust = 50000[N];
11 :>> mass = 400[kg];
12 :>> cost = 120;
13 :>> fuelEff = 8.5;
14 }
15
16 // 备选方案 B:轻量引擎
17 part optionB : PropulsionSystem {
18 :>> thrust = 35000[N];
19 :>> mass = 250[kg];
20 :>> cost = 85;
21 :>> fuelEff = 12.0;
22 }
23
24 // 备选方案 C:混合动力
25 part optionC : PropulsionSystem {
26 :>> thrust = 42000[N];
27 :>> mass = 350[kg];
28 :>> cost = 150;
29 :>> fuelEff = 15.0;
30 }
权衡分析案例
1 analysis case def PropulsionTradeStudy {
2 subject candidate : PropulsionSystem;
3
4 objective bestValue {
5 doc /* 在满足推力约束的前提下,选择综合得分最高的方案 */
6 maximize scoreCalc.score;
7 }
8
9 // 加权评分计算
10 calc scoreCalc : WeightedScore {
11 in thrustVal = candidate.thrust;
12 in massVal = candidate.mass;
13 in costVal = candidate.cost;
14 in fuelEffVal = candidate.fuelEff;
15 }
16
17 assert constraint minThrust : ThrustConstraint {
18 in twr = candidate.thrust / (candidate.mass * 9.81[m/s^2]);
19 }
20
21 return scoreCalc.score;
22 }
对每个备选方案运行分析
1 // 针对每个候选方案实例化权衡分析
2 analysis case tradeA : PropulsionTradeStudy { subject optionA; }
3 analysis case tradeB : PropulsionTradeStudy { subject optionB; }
4 analysis case tradeC : PropulsionTradeStudy { subject optionC; }
权衡研究的可追溯性是其核心价值。每个决策都记录在模型中:选择了什么、为什么选择、基于哪些数据。当需求变更时,只需重新运行分析案例即可评估影响。
度量与评估准则
KerML 来源:度量通过 attribute def 和标准库类型(ISQ)建模;评估准则通过 calc def 和 constraint def 组合实现
有效的分析依赖于明确定义的度量(measures of effectiveness, MOE)和评估准则。SysML v2 通过属性定义和计算定义的组合,将这些度量形式化为模型的一部分。
定义度量属性
1 attribute def PerformanceMetrics {
2 attribute range : ISQ::LengthValue; // 航程
3 attribute endurance : ISQ::TimeValue; // 续航时间
4 attribute maxSpeed : ISQ::SpeedValue; // 最大速度
5 attribute unitCost : Real; // 单位成本
6 attribute reliability : Real; // 可靠性(0-1)
7 }
加权评分计算
权衡研究通常使用加权评分法。每个度量被归一化后乘以权重,再求和得到综合得分:
1 calc def WeightedScore {
2 in thrustVal : ISQ::ForceValue;
3 in massVal : ISQ::MassValue;
4 in costVal : Real;
5 in fuelEffVal : Real;
6
7 // 权重系数
8 attribute wThrust : Real = 0.30; // 推力权重 30%
9 attribute wMass : Real = 0.25; // 质量权重 25%
10 attribute wCost : Real = 0.20; // 成本权重 20%
11 attribute wFuelEff : Real = 0.25; // 燃油效率权重 25%
12
13 // 归一化后加权求和
14 return score : Real =
15 wThrust * (thrustVal / 50000[N]) +
16 wMass * (1 - massVal / 500[kg]) +
17 wCost * (1 - costVal / 200) +
18 wFuelEff * (fuelEffVal / 20);
19 }
评估结果对比表
权衡研究的输出通常以对比表形式呈现:
| 度量指标 | 权重 | 方案 A(大推力) | 方案 B(轻量) | 方案 C(混动) |
|---|---|---|---|---|
| 推力(N) | 30% | 50,000 ✔ | 35,000 | 42,000 |
| 质量(kg) | 25% | 400 | 250 ✔ | 350 |
| 成本(万元) | 20% | 120 | 85 ✔ | 150 |
| 燃油效率(km/L) | 25% | 8.5 | 12.0 | 15.0 ✔ |
| 加权总分 | 100% | 0.695 | 0.738 | 0.763 |
在实际工程中,权重系数的确定本身就是一个重要决策。可以通过层次分析法(AHP)或利益相关者投票来确定权重。SysML v2 模型可以在权重变化时快速重新计算,进行灵敏度分析。
完整示例
以下模型综合了本模块的所有内容:一个 UAV 推进系统权衡研究,整合了计算定义、约束、分析案例、目标函数和多方案对比。
1 package UAVTradeStudy {
2 private import ISQ::*; private import SI::*;
3
4 // ── 部件定义 ─────────────────────────────────────────
5 part def Engine {
6 attribute thrust : ISQ::ForceValue;
7 attribute mass : ISQ::MassValue;
8 attribute cost : Real; // 成本(万元)
9 attribute fuelRate : Real; // 耗油率(L/h)
10 }
11
12 part def UAV {
13 attribute airframeMass : ISQ::MassValue;
14 attribute fuelCapacity : Real; // 油箱容量(L)
15 part engine : Engine;
16 }
17
18 // ── 计算定义 ─────────────────────────────────────────
19 calc def TotalMass {
20 in airframe : ISQ::MassValue;
21 in engineM : ISQ::MassValue;
22 return result : ISQ::MassValue = airframe + engineM;
23 }
24
25 calc def EnduranceCalc {
26 in fuelCap : Real; // 油箱容量
27 in fuelRate : Real; // 耗油率
28 return hours : Real = fuelCap / fuelRate; // 续航小时数
29 }
30
31 calc def TradeScore {
32 in thrust : ISQ::ForceValue;
33 in totalMass : ISQ::MassValue;
34 in cost : Real;
35 in endurance : Real;
36 return score : Real =
37 0.30 * (thrust / 60000[N]) + // 推力得分
38 0.25 * (1 - totalMass / 800[kg]) + // 轻量得分
39 0.20 * (1 - cost / 200) + // 低成本得分
40 0.25 * (endurance / 12); // 续航得分
41 }
42
43 // ── 约束定义 ─────────────────────────────────────────
44 constraint def MaxTakeoffMass {
45 in total : ISQ::MassValue;
46 total <= 700[kg] // 最大起飞质量限制
47 }
48
49 constraint def MinEndurance {
50 in hours : Real;
51 hours >= 4.0 // 最少续航 4 小时
52 }
53
54 // ── 分析案例 ─────────────────────────────────────────
55 analysis case def EngineTradeStudy {
56 subject uav : UAV;
57
58 objective selectBest {
59 doc /* 在满足质量和续航约束的条件下,选择综合得分最高的引擎 */
60 require constraint massOk : MaxTakeoffMass;
61 require constraint endurOk : MinEndurance;
62 maximize finalScore.score;
63 }
64
65 // 计算步骤
66 calc mass : TotalMass {
67 in airframe = uav.airframeMass;
68 in engineM = uav.engine.mass;
69 }
70
71 calc endur : EnduranceCalc {
72 in fuelCap = uav.fuelCapacity;
73 in fuelRate = uav.engine.fuelRate;
74 }
75
76 calc finalScore : TradeScore {
77 in thrust = uav.engine.thrust;
78 in totalMass = mass.result;
79 in cost = uav.engine.cost;
80 in endurance = endur.hours;
81 }
82
83 // 断言约束
84 assert constraint massOk : MaxTakeoffMass {
85 in total = mass.result;
86 }
87 assert constraint endurOk : MinEndurance {
88 in hours = endur.hours;
89 }
90
91 return finalScore.score;
92 }
93
94 // ── 备选方案实例化 ───────────────────────────────────
95 part uavAlpha : UAV {
96 :>> airframeMass = 350[kg]; :>> fuelCapacity = 80;
97 part engine : Engine {
98 :>> thrust = 45000[N]; :>> mass = 180[kg];
99 :>> cost = 95; :>> fuelRate = 12;
100 }
101 }
102
103 part uavBeta : UAV {
104 :>> airframeMass = 350[kg]; :>> fuelCapacity = 80;
105 part engine : Engine {
106 :>> thrust = 38000[N]; :>> mass = 120[kg];
107 :>> cost = 65; :>> fuelRate = 8;
108 }
109 }
110
111 // ── 运行权衡分析 ─────────────────────────────────────
112 analysis case studyAlpha : EngineTradeStudy { subject uavAlpha; }
113 analysis case studyBeta : EngineTradeStudy { subject uavBeta; }
114 }
此模型演示了:calc def(可复用的数学函数)、constraint def(设计约束条件)、带 objective 和 maximize 的 analysis case def、assert constraint(断言设计可行性)、以及通过实例化同一分析案例对多个备选方案进行系统化比较。
本模块总结
| SysML v2 概念 | KerML 来源 | 关键规则 |
|---|---|---|
analysis case def | CaseDefinition | 结构化分析框架;包含 subject、参数、计算步骤和 return |
analysis case(用法) | 由 CaseDefinition 类型化的 Feature | 绑定具体设计参数实例化分析 |
calc def | Function(KerML Core 层) | 可复用的数学函数;必须有 return 结果 |
calc(用法) | 由 Function 类型化的 Feature | 在分析或约束中调用计算 |
constraint def | Predicate | 返回 Boolean 的断言;定义设计可行域 |
assert constraint | Predicate 的实例化断言 | 声明约束必须成立;用于验证 |
objective | RequirementUsage | 分析的目标函数;支持 maximize / minimize |
subject | SubjectMembership | 指定分析所针对的系统或组件 |
return | ResultExpressionMembership | 分析案例的最终输出值 |
| 权衡研究 | 分析案例的多实例比较 | 对各备选方案运行同一分析;决策可追溯 |