Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在POST方法的主体中是否有发送函数的方法_Python_C#_Rest_Api Design - Fatal编程技术网

Python 在POST方法的主体中是否有发送函数的方法

Python 在POST方法的主体中是否有发送函数的方法,python,c#,rest,api-design,Python,C#,Rest,Api Design,我的游戏有一个web应用程序和web API服务器,每年有一个状态。游戏的工作原理如下: [HttpPost] public GameState Post([FromBody] (GameState currentGameState, PlayerSelection playerSelection)) { var nextGameState = _gameLogic.GetNextStep(currentGameState, playerSelection); return next

我的游戏有一个web应用程序和web API服务器,每年有一个状态。游戏的工作原理如下:

[HttpPost]
public GameState Post([FromBody] (GameState currentGameState, PlayerSelection playerSelection))
{
   var nextGameState = _gameLogic.GetNextStep(currentGameState, playerSelection);
   return nextGameState;
}
  • 新游戏(第0年)
  • 玩家在网上选择下一步
  • 玩家点击提交,调用API
  • API返回下一个状态(第1年),这将在web上显示一些数据
  • 玩家在网上选择下一步
  • 玩家点击提交,API称为API返回下一个状态(第2年)
  • 等等
  • 当游戏到达预定的年份时,游戏结束
  • api如下所示:

    [HttpPost]
    public GameState Post([FromBody] (GameState currentGameState, PlayerSelection playerSelection))
    {
       var nextGameState = _gameLogic.GetNextStep(currentGameState, playerSelection);
       return nextGameState;
    }
    
    现在我想做的是用Python编写一个AI,它将学习使用不同的策略玩游戏。在我看来,我可以用Python重新编码整个游戏,这样我就可以一遍又一遍地玩,或者我可以从Python调用API来玩游戏,而AI将决定如何玩

    第一个选项是不可行的,因为我不想重复代码,而第二个选项看起来很糟糕,因为玩10000个游戏可能会占用很多时间。我的问题是,是否有某种方法通过API发送函数,以便在我的控制器中有一个新函数:

    [HttpPost]
    public GameState Post([FromBody] Func<GameState, PlayerSelection> gamePlay)
    {
      var currentGameState = _gameLogic.GetInitial();
    
      while (currentGameState.Year < 50)
      {
         var nextMove = gamePlay(currentGameState);
         currentGameState = _gameLogic.GetNextStep(currentGameState, nextMove);
      }
    }
    
    [HttpPost]
    公共游戏状态帖子([FromBody]Func游戏性)
    {
    var currentGameState=_gameLogic.GetInitial();
    而(当前游戏状态。年份<50)
    {
    var nextMove=游戏性(当前游戏状态);
    currentGameState=\u gameLogic.GetNextStep(currentGameState,nextMove);
    }
    }
    

    因此,游戏性代表了基于当前数据的选择。这将显著提高AI必须执行的API调用数量,同时还将逻辑保留在web服务器上。它还允许AI将游戏功能参数化。我认为这可能需要某种特殊的解析器或某种元语言。有什么框架可以帮助解决这样的问题吗?

    不太清楚“发送函数”是什么意思……这个函数到底能做什么?为什么不在API中实现所需的功能?也许您只是需要python能够向服务器发送更详细的设置列表,以控制潜在的行为?确切地说,你的设想有点不清楚。通常当人们玩游戏时,他们会根据当前的游戏状态制定一些策略,一套行为规则。因此,如果你想象一个像Tic-Tac-Toe这样的游戏,游戏的玩法可以是从“在空方块上随机分配一个十字架”到“检查当前最长的带有空方块的十字架条纹并标记它,或者随机分配”或“eve n”神经网络矩阵将拾取方块”。如果Post服务是直接从代码中调用的,那么这将很容易做到,我只需要选择方法并将其作为参数传递,但我不确定我是否可以通过网络发送。您可能会将其复杂化了。实际上,python需要了解游戏状态(与玩家可以看到的状态相同),使用自己的逻辑计算出可能的最佳动作,然后将下一步动作发送到API。API不应该在意这一举动是由人类思维还是计算机思维发起的。API可能通过提供当前游戏状态的机器可读数据集(对经过身份验证的玩家可见)来帮助计算机控制的玩家以及人类玩家在页面中看到的视觉版本。我希望通过API传递策略的主要原因是,我可以将对API的调用数量从例如1000(每个游戏的每个步骤)减少到几乎每个策略1个。如果我们要测试数千个策略,那就是数千个API调用,而不是数百万个。我也可以用特定的策略创建一个新的控制器,这样Python只传递参数(数据)而不是函数,并完成同样的事情。但是,当我想改变我的AI的能力时,我需要总是改变我的API。换句话说,我认为Python(或任何调用方)应该处理AI逻辑,web服务器应该处理游戏逻辑。