首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让C#和Python为这个机器学习任务进行通信的最佳方法是什么?

让C#和Python为这个机器学习任务进行通信的最佳方法是什么?
EN

Stack Overflow用户
提问于 2018-02-27 20:06:27
回答 5查看 2.7K关注 0票数 1

我正在为一个大学项目开发一个简单的游戏,使用统一。这个游戏利用机器学习,所以我需要TensorFlow来建立一个神经网络( NN ),根据神经网络的预测来完成游戏中的某些动作。

特别是我的学习方法是强化学习。我需要监视用C#编码的环境中的状态和回报,并将它们传递给用Python编码的NN。然后,来自Python代码的预测应该被发送回环境到C#代码。

可悲的是,我很困惑如何让C#和Python进行交流。我在网上读了很多书,但什么也帮不了我。有人能澄清我的想法吗?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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模块。

票数 1
EN

Stack Overflow用户

发布于 2018-02-27 20:25:26

对于进程间通信而言,绝对值得一看的是(Win32)命名的管道。它几乎和写文件或从文件中读取一样容易。比TCP/IP更容易,而且您甚至可以通过本地网络进行通信,至少如果您有访问权限的话。添加您自己的序列化代码和完成。

但是,这是有点不对称的(在一个方向上,您只需打开一个带有管道名称的文件,在相反的方向上,您必须创建一个命名的管道对象,不要记住哪个是哪个)。

例如,请参见命名管道示例

如果你搜索“命名管道窗口”,你会发现大量的信息。但是请记住不要使用匿名管道(它们很难看)。

票数 3
EN

Stack Overflow用户

发布于 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)。

安装

代码语言:javascript
复制
    pip install pythonnet

在python中使用编译后的类库My.dll:

代码语言:javascript
复制
    import clr
    clr.AddReference("My.DLL")
    # call methods in dll

工作实例

github中的pythonnet

如何在python WIKI中使用包

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49017084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档