13

現在教えているコースの自動「評価者」を実装しています。全体的な考え方は、すべての学生がいくつかのアルゴリズムを実装した DLL を配布するというものです。私の評価者は、Reflection を使用してこれらすべての DLL をロードし、学生の実装を見つけて、トーナメントで評価します。これらのアルゴリズムはすべてブラックボックス オプティマイザーであり、次のインターフェイスを実装します。

public interface IContinuousMetaheuristic
{
    // ... Some unimportant properties
    Vector Evaluate(Function function, int maxEvaluations, ...);
}

Function(少なくとも関連部分)のクラス定義は次のとおりです。

public class Function:
{
    private Vector xopt; // The optimum point
    private double fopt; // The optimum value

    public double Evaluate(Vector x);
}

ご覧のとおり、Functionこれらのメタヒューリスティックにインスタンスを渡す必要があります。これらの機能は自分で実装しています。それらのほとんどは、ある意味でランダムです。つまり、関数コンストラクターでランダムな最適点を選択します。そのためxopt、クラスにフィールドが表示されます。問題は、生徒がリフレクションやその他の手法でxoptまたはフィールドにアクセスできないようにしたくないことです。 fopt.

したがって、一般的な質問は次のとおりです。動的にロードしたコードでリフレクションの使用を禁止する方法はありますか、または他の意味で、このコードがプライベート フィールドにアクセスすることを禁止する (チート) 方法はありますか。

前もって感謝します。

4

3 に答える 3

2

彼らはあなたにソースコードを提供しますか? "using System.Reflection" と "System.Reflection" を検出する別のツールを作成します。ソースで。彼らがそれを回避するための巧妙なトリックを思いついた場合、おそらく彼らは不正行為によって獲得した追加のポイントに値する. :)

また、彼らが使用するコードでこれはどうですか:

private double FakeOptimumPointWithAConvincingName{ get { return 12.07; } }

次に、エバリュエーターを実行するときにこれを次のように変更します。

private double FakeOptimumPointWithAConvincingName{ get { throw new SomeoneCheatedException(); } }

その線に沿って、他にも多くの巧妙なことを行うことができます。ポイントは、テクノロジーの代わりにトリッキーさを使用してそれらを阻止できることです。そして、彼らがより良いトリックを思いついたら、賞賛してください. :)

于 2012-06-22T14:05:14.853 に答える
1

必要な瞬間に設定ファイルから最適な値を読み込むと、それまでに反映するのが難しくなります

于 2012-06-22T15:12:00.147 に答える
1

簡単に言えば、.Net 4.0 (.Net. 3.5 までのサンドボックス化されたアプリケーションを作成する方法については、こちらを参照) まで、呼び出し元が完全に信頼されている限り、プライベート メソッドまたは内部メソッドのリフレクション検出を回避することはできません。

.Net 4 については、MSDN のSecurity Considerations for Reflection for .Net 4.0 を読みましたか?

于 2012-06-22T12:53:52.240 に答える