Optimization Scilab下料算法
我对Scilab(以及一般的编程)是新手。我正在尝试实现一个Scilab代码来解决库存削减问题,也称为“装箱” 问题是:给定大小为[](从s1到sn的向量)的“n”个项目,并且所有箱子的容量相同(c=1000),我需要最小化容纳所有项目所需的箱子数量 我正在尝试“下一个项目算法”,即从向量中选取第一个项目,将其放入箱子,然后选取下一个项目并尝试放入同一个箱子,以防没有足够的空间,然后创建另一个箱子 实际上,我不需要帮助改进算法,而是需要帮助实现这个特定算法的代码 以下是我到目前为止所做的尝试:Optimization Scilab下料算法,optimization,scilab,Optimization,Scilab,我对Scilab(以及一般的编程)是新手。我正在尝试实现一个Scilab代码来解决库存削减问题,也称为“装箱” 问题是:给定大小为[](从s1到sn的向量)的“n”个项目,并且所有箱子的容量相同(c=1000),我需要最小化容纳所有项目所需的箱子数量 我正在尝试“下一个项目算法”,即从向量中选取第一个项目,将其放入箱子,然后选取下一个项目并尝试放入同一个箱子,以防没有足够的空间,然后创建另一个箱子 实际上,我不需要帮助改进算法,而是需要帮助实现这个特定算法的代码 以下是我到目前为止所做的尝试:
// 'n' is the number of items to be packed
// 'c' is the capacity (how much items fit in the bin)
// 'sizes' a vector containing the size of n items
// 'nbins' number of bins used so far
// 'bin_rem' space left in current bin
sizes=[400,401,402,403,404,405,406,408,409,411,428,450,482]
c=1000
n=length(sizes)
nbins = 0
bin_rem = c
function y = bins(sizes,c,n)
for i=0; i<n; i=i+1
if sizes[i] > bin_rem
nbins=nbins+1
bin_rem = c - sizes(i)
bin_rem = bin_rem - sizes(i)
end
endfunction
disp ("Number of bins needed "+string(bins([sizes,c,n])))
end
/“n”是要打包的项目数
//“c”是容量(箱子中可容纳的物品数量)
//“大小”包含n个项目大小的向量
//“nbins”到目前为止使用的垃圾箱数量
//当前存储箱中剩余的“bin_rem”空间
尺寸=[40040140240204405406408409411428450482]
c=1000
n=长度(尺寸)
nbins=0
bin_rem=c
功能y=料仓(尺寸c、n)
对于i=0;我是宾瑞
nbins=nbins+1
bin_rem=c-尺寸(i)
bin_rem=bin_rem-尺寸(i)
结束
端功能
disp(“需要的箱子数量”+字符串(箱子([尺寸,c,n]))
结束
我被下面这个错误所困扰,不知道如何解决它
在已执行文件的第20行
端功能
^~~~~~~~~~~^
错误:语法错误,意外的endfunction,应为end
有什么帮助吗?首先,您似乎还不太了解Scilab的语法,因为我看到您使用的是
size[I]
,而不是size(I)
,并调用bin([size,c,n])
。所以,现在,尽量不要使用函数。至于您得到的错误,它的发生是因为您忘记了一个end
。按照编写代码的方式,只有if
语句是关闭的,而for循环仍然是打开的
其次,当您纠正这个错误时,您会注意到您的程序不能正常工作,这是因为您错误地定义了循环。在Scilab中,
for
循环实际上是一个“for each”循环,因此,您需要为每个迭代提供完整的值范围,而不是起始值(i=0
),条件(i),首先,您似乎还不太理解Scilab的语法,因为我看到您使用的是size[i]
,而不是size(i)
,并调用bin([size,c,n])
。因此,现在,请尽量不要使用函数。至于出现的错误,是因为您忘记了一个end
。按照编写代码的方式,只有if
语句是关闭的,而for循环仍然是打开的
其次,当您纠正这一点时,您会注意到您的程序工作不正常,这是因为您定义了错误的循环。在Scilab中,for
循环实际上是一个“for each”循环,因此,您需要为每个迭代提供完整的值,而不是起始值(i=0
)、条件(i)
sizes=[400,401,402,403,404,405,406,408,409,411,428,450,482]
c=1000
n=length(sizes)
nbins = 0 //should start as 0
bin_rem = 0 //should start as 0
for i = 1:n
if sizes(i) > bin_rem
nbins = nbins + 1;
bin_rem = c - sizes(i);
else
bin_rem = bin_rem - sizes(i);
end
end
disp ("Number of bins needed "+string(nbins))