434
社区成员
发帖
与我相关
我的任务
分享问题:设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j 处购得的部件i的重量,cij是相应的价格。试设计一个算法,给出总价格不超过d的最小重量机器设计。
输入样例:
3 3 4
1 2 3
3 2 1
2 2 2
1 2 3
3 2 1
2 2 2
1.1 说明“最小重量机器设计问题"的解空间
{(1,2,1)(1,2,2)(1,2,3)(1,3,1)(1,3,2)(1,3,3)(2,2,1)(2,2,2)(2,2,3)(2,3,1)(2,3,2)(2,3,3)}
1.2 说明 “最小重量机器设计问题"的解空间树
首先初始化当前价格tc=0,当前重量tw=0,设置一个变量minw表示选择机器的总重量,初始化其为每个部件从1号供应商购买的重量。
用递归函数来实现回溯法搜索排列树(形式参数i表示递归深度)。若tc>d,则为不可行解,剪去相应子树,返回到i-1层继续执行。若tw>=minw,则不是最优解,剪去相应子树,返回到i-1层继续执行。若i>n,则算法搜索到一个叶结点,用minw对最优解进行记录,返回到i-1层继续执行。
1.3 在遍历解空间树的过程中,每个结点的状态值是什么
树的根结点位于第1层,表示搜索的初始状态,第2层的结点表示对第一的物品选择某一个商家,第1层到第2层的边上为这个商家的物品的重量。依此类推,从树的根结点到叶子结点的路径就构成了解空间的一个可能解。
回溯法的基本思想就是为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造。创建解空间数,从根结点出发,按照深度优先策略搜索(遍历)解空间树,搜索满足约束条件的解。可以设置约束条件和限界函数剪枝,提高效率。