这是一个我想制定的问题: 画家打算用厘米来画出不同大小的方形画布:
25cm x 35cm - 20个, 50 x 30 - 30个, 90 x 50 - 40个, 110 x 60 - 25个,
画家将购买200厘米的木质担架,并相应地切割。 条件是"每个边框边缘应该是单个连续条。没有粘合"。
无限长木制担架,长度为200厘米。 画家应该买多少(200厘米)的酒吧? 如何计算优化的棒数,最少浪费吧?
这个问题与优化(数学编程)还是AI有关? PHP,Perl,vbscript代码欢迎。
============== 为了清楚起见,这里是从200厘米棒生产的确切长度。
LENGTH PIECES TOTAL LENGTH
110 cm 50 pcs 5500 cm
90 cm 80 pcs 7200 cm
60 cm 50 pcs 3000 cm
50 cm 140 pcs 7000 cm
35 cm 40 pcs 1400 cm
30 cm 60 pcs 1800 cm
25 cm 40 pcs 1000 cm
===========================================
ALL TOTAL: 26900 cm
如果我们允许粘合剩余的小块,它等于134.5巴。
指导画家应该从每个条形切割的长度是切实可行的。 否则他将不知道如何处理所提供的酒吧。
答案 0 :(得分:1)
你需要宽度的担架条来计算角度的长度(为canavas的每一边花费额外的2*$stretcher_width
)
use strict;
use warnings;
my $stretcher_length = 200;
my $stretcher_width = 0;
my $wasted_per_side = 2*$stretcher_width;
my @sc = (
{w=> 25, h=> 35, pcs=> 20},
{w=> 50, h=> 30, pcs=> 30},
{w=> 90, h=> 50, pcs=> 40},
{w=> 110, h=> 60, pcs=> 25},
);
# all possible bars needed from longest to shortest
my @all = sort { $b <=> $a } map {
(
($_->{w}+$wasted_per_side) x2, ($_->{h}+$wasted_per_side) x2
)x $_->{pcs};
}
@sc;
# lets cut from 200cm bars
my @rest;
for my $len (@all) {
my $cut_from;
# do we already have bar which can be used?
for my $len_have (@rest) {
# yes, we have
if ($len_have >= $len) { $cut_from = \$len_have; last; }
}
# no, we need another 200cm bar
if (!$cut_from) {
print "Taking new $stretcher_length cm bar\n";
push @rest, $stretcher_length;
$cut_from = \$rest[-1];
}
# cut it
print "Now you have at least one bar $$cut_from long and cut away $len\n";
$$cut_from -= $len;
# keep @rest bars sorted from shortest to longest
@rest = sort { $a <=> $b } @rest;
}
print scalar @rest;
# print "@rest\n"; # left overs
答案 1 :(得分:0)