小编Joh*_*zen的帖子

什么是最好的战舰AI?

战舰!

早在2003年(当时我17岁),我就参加了战舰AI编码比赛.即使我输掉了那场比赛,我也玩得很开心并从中学到了很多东西.

现在,我想在这场比赛中复活,寻找最好的战舰AI.

这是框架,现在托管在Bitbucket上.

获奖者将获得+450声望!比赛将于2009年11月17日开始.不接受17日零时以外的参赛作品或编辑.(中央标准时间)提前提交您的参赛作品,这样您就不会错过机会!

为了保持这个目标,请遵循竞争精神.

游戏规则:

  1. 游戏将在10x10网格上进行.
  2. 每个参赛者将5艘船(长度分别为2,3,3,4,5)放置在其网格上.
  3. 没有船只可能重叠,但它们可能相邻.
  4. 然后竞争对手轮流对对手开枪.
    • 游戏的一个变种允许每次击球射击多次射击,每个幸存的船只射击一次.
  5. 如果击球下沉,命中或未命中,对手将通知对手.
  6. 当任何一个玩家的所有船只都沉没时,游戏结束.

比赛规则:

  1. 竞争的精神是找到最好的战舰算法.
  2. 任何被视为违反竞争精神的东西都将被取消资格.
  3. 干扰对手是违背竞争精神的.
  4. 多线程可以在以下限制下使用:
    • 在轮到你的时候,不超过一个线程可能正在运行.(但是,任意数量的线程可能处于"暂停"状态).
    • 没有线程可以以"正常"以外的优先级运行.
    • 鉴于上述两个限制,您将在转弯期间保证至少3个专用CPU核心.
  5. 每个游戏的CPU时间限制为1秒,分配给主线程上的每个竞争对手.
  6. 时间不多会导致当前游戏失败.
  7. 任何未处理的异常都将导致失去当前的游戏.
  8. 允许网络访问和磁盘访问,但您可能会发现时间限制相当令人望而却步.然而,为了减轻时间紧张,增加了一些设置和拆卸方法.
  9. 代码应作为答案发布在堆栈溢出上,或者如果太大则链接.
  10. 条目的最大总大小(未压缩)为1 MB.
  11. 官方说来,.Net 2.0/3.5是唯一的框架要求.
  12. 您的条目必须实现IBattleshipOpponent接口.

评分:

  1. 101场比赛中最好的51场比赛是一场比赛的胜利者.
  2. 所有竞争对手都将相互配对,循环风格.
  3. 然后,最好的一半竞争者将参加双重淘汰赛以确定获胜者.(实际上,2的最小功率大于或等于一半.)
  4. 我将使用TournamentApi框架进行锦标赛.
  5. 结果将在此处公布.
  6. 如果您提交了多个条目,则只有您的得分最高的条目才有资格获得双重条目.

祝好运!玩得开心!


编辑1:
感谢Freed,他在Ship.IsValid函数中发现了一个错误.它已被修复.请下载该框架的更新版本.

编辑2:
由于人们对将统计信息持久存储到磁盘等方面非常感兴趣,因此我添加了一些应该提供所需功能的非定时设置和拆除事件.这是一个半破坏性的变化.也就是说:界面已经过修改以添加功能,但不需要它们.请下载该框架的更新版本.

编辑3:
错误修复1:GameWon并且GameLost只在超时的情况下被调用.
错误修复2:如果引擎在每场比赛中超时,则比赛永远不会结束.
请下载该框架的更新版本.

编辑4:
比赛结果:

.net c# artificial-intelligence

315
推荐指数
10
解决办法
6万
查看次数

ASP MVC:IController Dispose()何时调用?

我正在对我的一个较大的MVC应用程序进行重大的重构/速度调整.它已经部署到生产几个月了,我开始等待连接池中的连接超时.我已将问题跟踪到未正确处理的连接.

鉴于此,我已经对我的基本控制器进行了此更改:

public class MyBaseController : Controller
{
    private ConfigurationManager configManager;  // Manages the data context.

    public MyBaseController()
    {
         configManager = new ConfigurationManager();
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (this.configManager != null)
            {
                this.configManager.Dispose();
                this.configManager = null;
            }
        }

        base.Dispose(disposing);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我有两个问题:

  1. 我是否介绍了竞争条件?由于configManager管理DataContextIQueryable<>参数公开给视图,我需要确保Dispose()在视图完成渲染之前不会在控制器上调用.
  2. MVC框架是否在Dispose()呈现视图之前或之后调用Controller?或者,MVC框架是否将其留给了GarbageCollector?

asp.net-mvc garbage-collection idisposable linq-to-sql

82
推荐指数
2
解决办法
2万
查看次数

SVN在具有历史记录的存储库之间进行复制

我的一位队友询问是否可以从一个SVN导出到另一个SVN,同时保留历史记录.

对我来说,这似乎是一个共同的要求.

那么:是否有可能在维护历史记录的同时在SVN存储库之间进行迁移?

重要的是要注意我们在Source上没有svnadmin访问权限,但我们确实在Destination上有访问权限.

如果这只是从源中检出每个修订版,并将其检入目的地,那么我们就可以了,只要有一个自动化过程.

编辑:我忘了提到目标仓库在Windows上.

svn version-control data-migration

69
推荐指数
4
解决办法
8万
查看次数

我可以用逗号将多行划分为一列吗?

我试图在我的SQL Server数据库中合并这样的东西:

[TicketID], [Person]
 T0001       Alice
 T0001       Bob
 T0002       Catherine
 T0002       Doug
 T0003       Elaine

进入:

[TicketID], [People]
 T0001       Alice, Bob
 T0002       Catherine, Doug
 T0003       Elaine

我需要在SQL Server和Oracle中执行此操作.

我发现GROUP_CONCATMySQL 的功能完全符合我的需要,但MySQL不是一个选项.

编辑:测试台:

DECLARE @Tickets TABLE (
    [TicketID] char(5) NOT NULL,
    [Person] nvarchar(15) NOT NULL
)

INSERT INTO @Tickets VALUES
    ('T0001', 'Alice'),
    ('T0001', 'Bob'),
    ('T0002', 'Catherine'),
    ('T0002', 'Doug'),
    ('T0003', 'Elaine')

SELECT * FROM @Tickets
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008

68
推荐指数
5
解决办法
9万
查看次数

如果"Utilities"类是邪恶的,我在哪里放置我的通用代码?

我通常遵循全局变量/函数是邪恶的规则,并且每一段代码都应该存在于它所属的类中.

这是一个非常容易遵循的规则,我相信到目前为止我还没有遇到过这条规则的问题.

然而,今天,我需要的功能添加到我的组装,而不是一个特定的类.也就是说,我的几乎所有类都可以用于这个特定的功能.

我应该把这个功能放在哪里(+1重载)?

如果我把它放在"公用事业"课程中,我会觉得很脏.如果我将它添加到一个半相关的类,并让其他类直接调用它,我会感觉更糟.

这段特殊的代码基本上是IList<PointF>一个规范化的列表.我觉得现在添加它作为扩展方法IList<PointF>可能是最好的选择...

c# oop global-variables utility-method

64
推荐指数
2
解决办法
2万
查看次数

ReSharper - 使用Microsoft.Contracts时可能的空值分配

有没有办法向ReSharper表明由于按合同设计需要检查,不会出现空引用?例如,以下代码将Possible 'null' assignment to entity marked with 'NotNull' attribute在第7行和第8行的ReSharper中引发warning():

private Dictionary<string, string> _Lookup = new Dictionary<string, string>();

public void Foo(string s)
{
    Contract.Requires(!String.IsNullOrEmpty(s));

    if (_Lookup.ContainsKey(s))
        _Lookup.Remove(s);
}
Run Code Online (Sandbox Code Playgroud)

真正奇怪的是,如果删除该Contract.Requires(...)行,ReSharper消息就会消失.

更新

我通过ExternalAnnotations找到了解决方案,Mike也在下面提到过.以下是如何在Microsoft.Contracts中为函数执行此操作的示例:

  • 创建一个Microsoft.ContractsExternalAnnotationsReSharper目录下调用的目录.
  • 接下来,创建一个名为的文件Microsoft.Contracts.xml并填充如下:

<assembly name="Microsoft.Contracts">
    <member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean)">
        <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/>
        <parameter name="condition">
            <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)">
                <argument>0</argument>
            </attribute>
        </parameter>
    </member>
</assembly>
Run Code Online (Sandbox Code Playgroud)

  • 重新启动Visual Studio,消息就消失了!

c# resharper design-by-contract code-contracts microsoft-contracts

52
推荐指数
3
解决办法
9640
查看次数

为什么Main方法是私有的?

新的控制台项目模板创建一个Main方法,如下所示:

class Program
{
    static void Main(string[] args)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么Main方法和Program类都不需要公开?

.net c# methods syntax

51
推荐指数
2
解决办法
8974
查看次数

你能让StreamReader不要处理底层流吗?

有没有办法做到这一点:

this.logFile = File.Open("what_r_u_doing.log", FileMode.OpenOrCreate, FileAccess.ReadWrite);

using(var sr = new StreamReader(this.logFile))
{
    // Read the data in
}

// ... later on in the class ...

this.logFile = File.Open("what_r_u_doing.log", FileMode.OpenOrCreate, FileAccess.ReadWrite);

using(var sw = new StreamWriter(this.logFile))
{
    // Write additional data out...
}
Run Code Online (Sandbox Code Playgroud)

无需打开文件两次?

我似乎无法使StreamReader不处理我的流.我也不想让它超出范围.然后垃圾收集器最终将调用Dispose,杀死流.

c# file-io

49
推荐指数
3
解决办法
2万
查看次数

Microsoft Code Contracts框架有多成熟?

微软最近在DevLabs上发布了他们的Code Contracts框架并获得了商业许可.我们有兴趣在我们的项目中使用它们(主要是C#,一些C++/CLI)来逐步替换所有自定义验证代码,但我很想知道其他人在我们承诺之前使用它的经验,特别:

  • 您是否认为该框架对于大型复杂的商业项目而言已经足够成熟?

  • 使用它时遇到了什么问题?

  • 你从中得到了什么好处?

  • 它目前是否比它的价值更痛苦?

我意识到这是一个有点主观的问题,因为它需要意见,但鉴于这个框架是.NET 4.0的一个非常重要的部分,并且(可能)改变了我们编写验证代码的方式,我希望这个问题将会留下开放以收集有关该主题的经验,以帮助我做出具体的,可回答的问题的决定:

我们下个月应该开始使用吗?

请注意,我们不提供代码API,只提供Web服务,因此对于抛出异常类型方面的大多数代码打破兼容性并不是一个问题.然而,正如我希望更多人而不仅仅是我将受益于这篇文章及其答案,这个领域的任何细节都非常受欢迎.

validation .net-4.0 code-contracts microsoft-contracts

43
推荐指数
3
解决办法
3717
查看次数

如何在迭代器中使用Html.DisplayFor?

我很喜欢 MVC 2.整个过程非常适合网络.

然而,有一项功能,我无法哄骗这个Html.DisplayFor()功能:

<@ Page Inherits="ViewPage<IEnumerable<Foo>>">

<% foreach(var item in Model) { %>

    <%: Html.DisplayFor(item.BarBaz) %>

<% } %>
Run Code Online (Sandbox Code Playgroud)

我需要能够使用DisplayTemplate来获取此值.有没有办法做到这一点?

c# asp.net-mvc-2

36
推荐指数
3
解决办法
2万
查看次数