类型脚本中的 三维容器包装
这是 TypeScript 端口 3DC 集装箱包 C#图书馆,由Davidmchapman编写。 。 。 .
它包含一个EB-AFIT算法的实现,一种以解决三维托盘包装问题为目的的heuristic方法,也称为3D bin包装. 它是由美国空军技术学院(AFIT)的埃尔汉·巴尔塔克奥克卢(EB)于2001年作为其硕士论文的一部分所开发,后来在2006年与詹姆斯·T·摩尔和小雷蒙德·R·希尔(英语:Raymond R. Hill Jr.)合著的论文中被描述. 如果您想更多地了解该算法及其历史, 请访问参考执行仓库: https://github.com/wknechtel/3d-bin-pack (中文(简体) )。 。 。 .
这个TypeScript端口包括了所有原始功能外加一个新的包 Incremental功能,它自动将物品分出在多个相同尺寸的容器上.
特征
- 将物品装入容器,实现最佳空间利用.
- * 递增包装,在大小相同的多个集装箱间分发物品.
- 有完整类型定义的 TypeScript 支持 .
看看这个 实例 可操作代码样本的文件夹.
使用量
安装
npm install 3d-bin-packing-ts
基本用途
import { Container, Item, PackingService, PackingAlgorithmType } from '3d-bin-packing-ts';
// Create a container
const container = new Container('container1', 100, 100, 100);
// Create items to pack
const items = [
new Item('item1', 30, 40, 50, 1),
new Item('item2', 20, 30, 40, 2),
new Item('item3', 10, 20, 30, 3)
];
// Pack items into the container
const result = PackingService.packSingle(container, items);
// Check if all items were packed
console.log(`All items packed: ${result.algorithmPackingResults[0].isCompletePacked}`);
// Get packed items with their positions
const packedItems = result.algorithmPackingResults[0].packedItems;
console.log('Packed items:', packedItems);
// Get unpacked items
const unpackedItems = result.algorithmPackingResults[0].unpackedItems;
console.log('Unpacked items:', unpackedItems);
包装多容器
import { Container, Item, PackingService } from '3d-bin-packing-ts';
// Create multiple containers
const containers = [
new Container('container1', 100, 100, 100),
new Container('container2', 150, 150, 150)
];
// Create items to pack
const items = [
new Item('item1', 30, 40, 50, 1),
new Item('item2', 20, 30, 40, 2),
new Item('item3', 10, 20, 30, 3)
];
// Pack items into containers
const results = PackingService.pack(containers, items);
// Process results for each container
results.forEach(result => {
console.log(`Container ${result.containerId}:`);
console.log(`- Packed items: ${result.algorithmPackingResults[0].packedItems.length}`);
console.log(`- Unpacked items: ${result.algorithmPackingResults[0].unpackedItems.length}`);
console.log(`- Volume utilization: ${result.algorithmPackingResults[0].percentContainerVolumePacked}%`);
});
递增包装
import { Item, PackingService } from '3d-bin-packing-ts';
// Create items to pack
const items = [
new Item('item1', 30, 40, 50, 1),
new Item('item2', 20, 30, 40, 2),
new Item('item3', 10, 20, 30, 3)
];
// Define container dimensions
const containerDimensions = { length: 100, width: 100, height: 100 };
// Pack items incrementally (creates as many containers as needed)
const result = PackingService.packIncremental(items, containerDimensions);
// Get information about containers and item distribution
console.log(`Number of containers needed: ${result.containers.length}`);
// Get aggregated results (which items went into which container)
result.aggregatedResults.forEach(aggResult => {
console.log(`Container ${aggResult.containerId}:`);
aggResult.itemQuantities.forEach(itemQty => {
console.log(`- Item ${itemQty.itemId}: ${itemQty.quantity} units`);
});
});
API 参考
类
Container
代表装入物品的三维容器.
new Container(id: string, length: number, width: number, height: number)
Item
代表要打包的三维项目.
new Item(id: string, dim1: number, dim2: number, dim3: number, quantity: number)
PackingService
包装业务的静态服务.
方法:
packSingle(container, items, algorithmTypeIDs?): 将物品装入单个容器pack(containers, items, algorithmTypeIDs?): 将物品装入多个容器packIncremental(items, containerDimensions, maxVolumePercentage?, idGenerator?): 视需要将物品装入尽可能多的容器
接口和类型
AlgorithmPackingResult
包含包装作业的结果.
属性 :
packedItems: 组装物品及其位置unpackedItems: 无法打包的物品组isCompletePacked:布尔表示所有项目是否被包装packTimeMilliseconds: 包装所需时间percentContainerVolumePacked使用集装箱量的百分比percentItemVolumePacked: 包装物品总量的百分比