# ISCSO 2023 — 284 杆 3D 桁架尺寸优化

## 问题

最小化 3D 塔式桁架结构重量：
- **结构**：92 节点，284 杆件，23 层（每层 4 节点）
- **设计变量**：284 个离散截面ID
  - 每个杆件一个变量：`S_0, S_1, ..., S_283`
  - 每个 `S_i ∈ {1, 2, ..., 37}` 表示数据库中的截面ID
- **载荷工况**：3 个独立载荷工况
  - **LC 0**：总 12 kN，+X 方向，均匀分配到所有未支撑节点（88 节点，每节点约 136.36 N）
  - **LC 1**：总 12 kN，+Y 方向，均匀分配到所有未支撑节点（88 节点，每节点约 136.36 N）
  - **LC 2**：总 15 kN，-Z 方向，均匀分配到所有未支撑节点（88 节点，每节点约 170.45 N）
- **约束**：
  - 应力：所有杆件 `|σ_i| ≤ 248.2 MPa`（所有载荷工况）
  - 位移：所有自由自由度 `|δ_j| ≤ 5.0 mm`（所有载荷工况）
- **评估次数限制**：最多 200,000 次 FEM 评估

## 参数

### 材料属性
- **弹性模量**：E = 200 GPa = 200,000 MPa
- **密度**：ρ = 7.85e-3 kg/mm³
- **屈服应力**：248.2 MPa（用作应力限值）

### 约束限值
- **应力限值**：248.2 MPa（拉伸和压缩，AISC-LRFD 1994）
- **位移限值**：5.0 mm（所有方向：x, y, z）

### 塔结构几何
- **层数**：23 层（第 0 层到第 22 层）
- **高度**：40 m = 40,000 mm
- **底部截面**：正方形，半宽 2 m = 2000 mm
- **顶部截面**：正方形，半宽 0.5 m = 500 mm
- **节点布置**：每层 i (0-22)，4 个节点形成正方形
  - 节点 4i: (+hw, +hw, z)
  - 节点 4i+1: (-hw, +hw, z)
  - 节点 4i+2: (-hw, -hw, z)
  - 节点 4i+3: (+hw, -hw, z)
  - 其中 hw = 2000 - i × (2000-500)/22

### 支座
- **4 个基础节点**：节点 0, 1, 2, 3（第 0 层，底部）
- **所有支座**：完全固定（fix_x = true, fix_y = true, fix_z = true）
- **未支撑节点**：88 个节点（节点 4-91）

### 截面数据库
- **37 种管道截面**：ID 1 到 37
- **面积范围**：161.29 mm² (ID 1) 到 13741.91 mm² (ID 37)
- **离散选择**：每个杆件必须使用 37 种可用截面之一
- **截面数据**：在 `references/problem_data.json` 的 `"sections"` 数组中

## 设计变量

解向量包含 284 个元素：
```
x = [S_0, S_1, S_2, ..., S_283]
```

其中：
- `S_i` = 杆件 i 的截面ID (i = 0, 1, ..., 283)
- `S_i ∈ {1, 2, 3, ..., 37}`（仅整数）
- 每个ID对应一个具有固定横截面积的特定管道截面

**重要**：优化必须从设计空间中的**随机初始点**开始。

## 目标函数

最小化结构重量：
```
W(x) = Σ (ρ * L_i * A(S_i))
```

其中：
- `ρ = 7.85e-3 kg/mm³`（材料密度）
- `L_i` = 杆件 i 的长度（固定，取决于塔结构几何）
- `A(S_i)` = 截面ID `S_i` 的横截面积（来自数据库）
- 求和遍及所有 284 个杆件

## 约束

对于**3 个载荷工况中的每一个**，所有约束必须满足：

1. **应力约束**（所有 284 个杆件）：
   ```
   |σ_i| ≤ 248.2 MPa
   ```
   其中 `σ_i` 是当前载荷工况下杆件 i 的轴向应力
   - 正 = 拉伸，负 = 压缩
   - 按照 AISC-LRFD 1994 规范检查

2. **位移约束**（所有自由自由度）：
   ```
   |δ_j| ≤ 5.0 mm
   ```
   其中 `δ_j` 是自由自由度 j 的位移（x、y 或 z 方向）

只有当**所有 3 个载荷工况**的所有约束都满足（容差 1e-6）时，解才是**可行的**。

## 提交格式

在 `temp/submission.json` 输出 JSON 文件：

```json
{
  "benchmark_id": "iscso_2023",
  "solution_vector": [S_0, S_1, S_2, ..., S_283],
  "algorithm": "<你的算法名称>",
  "num_evaluations": <使用的FEM评估次数>
}
```

**要求**：
- `solution_vector`：284 个整数的数组（截面ID 1-37）
- `algorithm`：描述优化方法的字符串
- `num_evaluations`：整数 ≤ 200,000（FEM 调用次数）

**注意**：评估器独立跟踪并验证评估次数限制。

## 评分

- **可行解**：分数 = 结构重量（kg），**越低越好**
- **不可行解**：分数 = +∞

最终设计必须是可行的（任何载荷工况下都不允许约束违反）。

## 参考资料

- 问题数据：`references/problem_data.json`
- 评估器：`verification/evaluator.py`
- FEM 求解器：`verification/fem_truss3d.py`
