求助:如何让方法判断最优解?

「已注销」 2018-02-12 10:55:12
求助:如何让方法判断最优解?

比如开车从A-B地.

可能有10条路,每条路的公里数不一样,路上可能还有路障之类的,
比如A--C--B
A--D--B
A--E--B
每次运行这个方法的时候都不一样,比如这一次运行时,C地可能有路障,通过时间更长之类的,所以这个时候方法把这路条的评分降低.
每次这个方法的结果都不一样,
是否让方法在运行时自己先默认运行这10条路的可能性,然后给出每一条路的评分.
最后方法选择最高的分数的路.

这个是要怎么做到?

我是刚学半年的新手.可能有些奇怪,求大佬解答
...全文
1332 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2018-02-12
  • 打赏
  • 举报
回复
穷举得到最优解,也可以用退火算法得到近似最优
xuzuning 2018-02-12
  • 打赏
  • 举报
回复
当然可以 鉴于只是 先默认运行这10条路的可能性,然后给出每一条路的评分 所以并未涉及除 图的遍历 之外的知识,只需简单的递归一下就可以了
  • 打赏
  • 举报
回复
上述两方面相辅相成,一方面强调要擅于复用路径规划结果,另一方面要以事件驱动的思路(而不是简单函数式计算驱动)来设计核心流程。
「已注销」 2018-02-12
  • 打赏
  • 举报
回复
引用 2 楼 From_TaiWan 的回复:
这是带权值的最短路径问题,数据结构
多谢.我去看看这方面的知识.
秋的红果实 2018-02-12
  • 打赏
  • 举报
回复
这是带权值的最短路径问题,数据结构
  • 打赏
  • 举报
回复
涉及到软件设计方面,不外乎两方面,一方面是缓存技术,也就是说假设相同输入要运行1万次,那么只有第一次需要真正统计计算,而后边的9999次都应该直接拿出缓存结果。但是当任何一个路径上的条件改变了(比如说路障改变了),那么相关的缓存应该立刻自动清除,这样就可能使得第2589次查询时会重新进行真正的统计计算并且更新缓存内容。有些人说的“缓存”是典型的“庸俗化缓存”,也就是说只考虑把数据放到内存里、而并不考虑缓存的脏数据又需要实时地自动清除,那么这种设计就不是真正的合适的缓存系统。 第二个方面的设计其实与此极为类似,其实是同一个问题只是换了一个方面来说。假设你把统计查询结果保存起来(不管是存在数据库里还是放到内存),那么你都应该用事件驱动的基本思想、当路障改变的时候才来重新统计计算所有相关的道路。而不是动不动就在每一个前端需要访问的时候来搞一次耗时的重复统计查询!这个其实是更大的问题,一个人能否用事件驱动的思想来设计程序、还是只会用简单的函数计算式的思想来设计,决定着着实际开发交互应用系统的最终能力的高低。因为设计出来的流程就完全不同了。如果不理解事件驱动,那么只能做点理论上的“算法”研究,做不了实际落地的交互应用系统。
秋的红果实 2018-02-12
  • 打赏
  • 举报
回复
自己搜索吧,会有很多的知识
  • 打赏
  • 举报
回复
先学好数学、统计、规划论课程。这个属于应用领域知识深度的问题,跟编程无关。
秋的红果实 2018-02-12
  • 打赏
  • 举报
回复
你这些走法都是独立的啊,那可以不涉及最短路径问题 假设你的评分依据是:路程长×比例系数,可以类似这样写

/// <summary>
/// 
/// </summary>

class scores
{
    class roadCondition
    {
        public string roadName;
        public double roadLength;
        public double scale; //受阻系数
        public roadCondition(string p_name,double p_roadLength,double p_scale)
        {
            roadName = p_name;
            roadLength = p_roadLength;
            scale = p_scale;

        }
    }

    private List<roadCondition> roadList;

    public void addRoad(string p_name,double p_roadLength, double p_scale)
    {
        if(roadList==null)
        {
            roadList = new List<roadCondition>();
        }
        roadList.Add(new roadCondition(p_name,p_roadLength,p_scale));

    }

    public void clearRoad()
    {
        if(roadList!=null)
        {
            roadList.Clear();
        }
    }

    public string getBestRoad()
    {
        return roadList.OrderByDescending(r => r.roadLength * r.scale).FirstOrDefault().roadName;
    }
}

//计算
scores theScore = new scores();
theScore.addRoad("c", 100, 0.1);
theScore.addRoad("d", 120, 0.08);
theScore.addRoad("e", 80, 0.15);

Response.Write(theScore.getBestRoad() + "<br />");

 
web下输出e,最佳是e路径
码农阿宇 2018-02-12
  • 打赏
  • 举报
回复
这个还是跟你的计算规则有关

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧