Go 语言实现的服务器端铝型材线性优化算法服务,面向 Docker 容器部署。
支持以下业务场景:
当前版本分为两层:
第一阶段严格参考你给的 Excel/VBA 文件实现,核心行为与宏 线性优化() 保持一致:
kerf_width;这意味着:
batches,还会给出汇总后的 pattern_summaries;2线条06 做测试对齐,结果与原表一致:
88260961782mm×3 1582mm×1 × 501782mm×2 1582mm×2 × 11582mm×4 × 37在不破坏 V1 确定性和可复核性的前提下,已经补上服务端更实用的扩展能力:
allowed_stock_lengthsallowed_stock_rangestock_items(长度 + 数量)当前扩展层的批次选择策略是:
这保证了接口扩展后,依然保持可解释、可重现、可审计。
说明:这是第一版可落地实现,先复刻 Excel/VBA,再向动态规划、整数规划、列生成等更强优化算法演进。
curl http://localhost:8080/healthz
curl -X POST http://localhost:8080/optimize \
-H 'Content-Type: application/json' \
-d '{
"kerf_width": 5,
"materials": [
{
"name": "6063-T5",
"allowed_stock_range": {"min": 5000, "max": 7000, "step": 500}
},
{
"name": "6061-T6",
"allowed_stock_lengths": [6000, 6500]
},
{
"name": "6063-inventory",
"stock_items": [
{"length": 6000, "quantity": 2},
{"length": 4500, "quantity": 3}
]
}
],
"cuts": [
{"length": 1800, "quantity": 3},
{"length": 900, "quantity": 2}
]
}'
字段说明:
kerf_width:下刀缝宽度,单位 mm;可省略,默认 5materials[].allowed_stock_lengths:允许算法自由选用的原材料长度列表(默认视为数量不限)materials[].allowed_stock_range:允许算法在范围内按步长枚举原材料长度(默认视为数量不限)materials[].stock_items:明确库存约束,支持“多种长度 + 每种长度对应数量”cuts[]:成品切割需求,length 为长度,quantity 为数量
allowed_stock_lengths/allowed_stock_range可以和stock_items同时存在:前两者表示可自由选型,后者表示有限库存;算法会统一排序后做确定性选择。
返回示例:
{
"batches": [
{
"material_name": "6063-T5",
"stock_length": 5500,
"cuts": [1800, 1800, 1800],
"waste": 90
},
{
"material_name": "6063-inventory",
"stock_length": 4500,
"cuts": [900, 900],
"waste": 2695
}
],
"pattern_summaries": [
{
"pattern_key": "1800+1800+1800",
"display_text": "1800mm×3",
"count": 1,
"waste": 90,
"cuts": [1800, 1800, 1800]
},
{
"pattern_key": "900+900",
"display_text": "900mm×2",
"count": 1,
"waste": 2695,
"cuts": [900, 900]
}
],
"total_waste": 2785
}
其中:
batches:逐根原料的下料结果pattern_summaries:按 Excel “输出”页风格汇总后的切割模式统计total_waste:总尾料项目不依赖本机 Go 环境,直接用 Docker 运行:
docker build -t xxyh:local .
docker run --rm -p 8080:8080 xxyh:local
构建阶段会自动执行:
go test ./...
. ├── cmd/server/main.go # HTTP 服务入口 ├── internal/optimizer/ # 确定性优化算法 ├── Dockerfile # Alpine 运行镜像 └── README.md
pattern_summariesgo test ./...后续如果要进一步提升“最优率”或业务表达能力,建议继续增加: