【问题标题】:Java Heuristic SearchJava 启发式搜索
【发布时间】:2019-08-01 21:22:59
【问题描述】:

我正在尝试为 River 问题编写启发式搜索。问题是,我有 X 个体重 X 的人,X 可以驾驶木筏,他们都必须从河的一侧到达另一侧。

我尝试写以下内容; https://pastebin.com/h4adeVnv

    public int heuristic(State state){

    PersonState sState = (PersonState) state;

    if(sState.isBoatIsSouth()){

        return sState.isGoal() ? 0 : Collections.max(sState.listPersonsSouth).getWeight();
    }
    else {
        return sState.isGoal() ? 0 : Collections.min(sState.listPersonsNorth).getWeight();
    }

}

这让我远离预期答案的 1 个节点,并且在成本方面移动了 1 个节点。

我知道代码并没有真正检查当前状态与目标状态,但我不确定如何编写。

任何关于替代方法的建议或我可以做出的任何调整都将不胜感激!

【问题讨论】:

  • 此外,我尝试添加以下pastebin.com/E1VqNSKP,试图通过不高估成本来使搜索功能更可接受,但仍然存在同样的问题
  • 筏子只能靠重量航行吗?还是有空间限制?
  • 我的坏没有意识到我忘了说!有重量和空间限制(最多只能容纳 x 重量和 y 人)

标签: java search heuristics


【解决方案1】:

您是否尝试过平均体重?由于木筏只能容纳

它可能看起来像这样(写伪代码,因为我没有你的完整代码):

Raft raft = getRaft();
Double maxWeight = raft.getMaxWeight();
Double maxCapacity = raft.getMaxCapacity();
People[] people = getAllPeople();
Double optimalWeight = maxCapacity / maxWeight;
while(people > 0){
Person heaviestPerson = people.getHeaviestPerson();
Person lightestPerson = people.getLightestPerson();
Person secondLightestPerson = people.getSecondLightestPerson();

if((optimalWeight * 3 - (heaviestPerson.weight + lightestPerson.weight + secondLightestPerson.weight))
 < (optimalWeight * 2 - (heaviestPerson.weight + lightestPerson.weight))){
    raft.add(heaviestPerson);
    raft.add(lightestPerson);
    people.remove(heaviestPerson); 
    people.remove(lightestPerson);
}else{
    raft.add(heaviestPerson);
    raft.add(secondLightestPerson);
    raft.add(lightestPerson);
    people.remove(heaviestPerson); 
    people.remove(lightestPerson);
    people.remove(secondLightestPerson);
}
}

如果您将最重和最轻的人配对,您就是在从最佳体重中移除具有最大差异的人,并将所述差异抵消为更“正常”。当您这样做时,将人员添加到筏子变得越来越容易,因为当您删除每个具有高方差的人时,您会留下更接近最佳体重的人。

您也可以使用给出的方法进一步优化它(可能也检查第二重的人,等等)

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 2016-05-29
    • 2014-02-15
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多