我正在为一个大学项目开发一个简单的游戏,使用统一。这个游戏利用机器学习,所以我需要TensorFlow来建立一个神经网络( NN ),根据神经网络的预测来完成游戏中的某些动作。
特别是我的学习方法是强化学习。我需要监视用C#编码的环境中的状态和回报,并将它们传递给用Python编码的NN。然后,来自Python代码的预测应该被发送回环境到C#代码。
可悲的是,我很困惑如何让C#和Python进行交流。我在网上读了很多书,但什么也帮不了我。有人能澄清我的想法吗?谢谢。
发布于 2018-02-27 20:11:25
你有几个选择:
子过程
您可以通过统一的C#打开python脚本,然后向进程发送stdout和stdin数据。在Python方面,它和input()和print()一样简单,而在C#端,它基本上是从Stream对象中读取和写入(据我所知)
UDP/TCP套接字
您可以使Python成为UDP/TCP服务器(如果必须传输大量数据,则最好使用UDP,而且代码可能更简单)。然后创建一个C#客户机并向Python发送请求。python服务器将进行处理(AI魔术,yayy!)然后将结果返回到统一的C#。在C#中,您必须研究UdpClient类,以及socket模块。
发布于 2018-02-27 20:25:26
对于进程间通信而言,绝对值得一看的是(Win32)命名的管道。它几乎和写文件或从文件中读取一样容易。比TCP/IP更容易,而且您甚至可以通过本地网络进行通信,至少如果您有访问权限的话。添加您自己的序列化代码和完成。
但是,这是有点不对称的(在一个方向上,您只需打开一个带有管道名称的文件,在相反的方向上,您必须创建一个命名的管道对象,不要记住哪个是哪个)。
例如,请参见命名管道示例
如果你搜索“命名管道窗口”,你会发现大量的信息。但是请记住不要使用匿名管道(它们很难看)。
发布于 2018-02-28 12:54:04
您可以使用Pythonfor.NET (pythonnet)本地集成从.NET (pythonnet)编译的DLL和python。
pythonnet是一个包,它为Python程序员提供了与.NET 4.0+公共语言运行时(CLR)在Windows上和Mono运行时在Linux和OSX上的几乎无缝集成。
使用此包,您可以编写.NET应用程序的脚本或用Python构建整个应用程序,使用以.NET为目标的任何语言编写的.NET服务和组件(C#、VB.NET、F#、C++/CLI)。
安装
pip install pythonnet在python中使用编译后的类库My.dll:
import clr
clr.AddReference("My.DLL")
# call methods in dll见工作实例
github中的pythonnet
如何在python WIKI中使用包
https://stackoverflow.com/questions/49017084
复制相似问题