kbengine进阶的热更新方案

kbengine引擎架构分析 服务端组成 |----------| | client | x N |----------| ------------------------|-----|------------------------------- |----------| |----------| |----------| | loginsr 阅读详情

imp.reload可以重载模块,但是关键问题是已经实例化过的类是不会变的
比如:

  1. class AA:
  2.     def testaa():
  3.         DEBUG_MSG("test")
  4.                
  5. self.a=AA()

复制代码

使用imp.reload热更新后a还是不会变,需要重新把self.a.__class__=AA才能完成热更新
这样非常得不方便
一种可行的做法就是实例化类的时候把类都存到一个地方,然后热更新的时候全部把它们的__class__修改一下就行了

一开始用的装饰器的方式,但是有一些局限性,还是用继承的方式

  1.  
  2. g_allReloadObjectList=[]
  3. class Reload:
  4.     __reload__=True
  5.     def __init__(self):
  6.         g_allReloadObjectList.append(weakref.ref(self))

复制代码

创建类的时候就像:

  1. class AA(Reload):
  2.     def __init__(self):
  3.         Reload.__init__(self)

复制代码

就可以在实例化类的时候把实例存到g_allReloadObjectList里面

下面的代码写得比较垃圾,但是简单易懂:
reloadAllModule的功能是遍历base cell common user_type几个文件夹的所有文件,然后全部重载,感觉有点暴力,可以优化成只加载修改过的文件
同时把文件里需要热更新的类存到g_allClasses里
然后把g_allReloadObjectList里存的那些的实例的__class__全部改成g_allClasses里的
reloadSystem.py

  1. import inspect
  2. import os
  3. import importlib
  4. import imp
  5. import copy
  6. import weakref
  7. import KBEngine
  8. from KBEDebug import *
  9. if 0:
  10.     from baseapp import KBEngine
  11. if 0:
  12.     from cellapp import KBEngine
  13.  
  14. #需要把此文件加入热更新黑名单
  15. _blackList=["reloadSystem"]
  16. g_allClasses={}
  17.  
  18. g_allReloadObjectList=[]
  19. class Reload:
  20.     __reload__=True
  21.     def __init__(self):
  22.         g_allReloadObjectList.append(weakref.ref(self))
  23.  
  24. def reloadAllModule():
  25.     global g_allClasses
  26.     g_allClasses={}
  27.     #base cell common user_type文件夹内的所有py全部重载
  28.     if KBEngine.component=="baseapp":
  29.         sb=KBEngine.getResFullPath("base/kbemain.py")
  30.         sb=sb[:-10]
  31.         ll=len(sb)
  32.         for s in KBEngine.listPathRes("base","py"):
  33.             s=s[ll:-3]
  34.             s=s.replace('/','.')
  35.             mo=importlib.import_module(s)
  36.             _reloadModule(mo)
  37.     elif KBEngine.component=="cellapp":
  38.         sb=KBEngine.getResFullPath("cell/kbemain.py")
  39.         sb=sb[:-10]
  40.         ll=len(sb)
  41.         for s in KBEngine.listPathRes("cell","py"):
  42.             s=s[ll:-3]
  43.             s=s.replace('/','.')
  44.             mo=importlib.import_module(s)
  45.             _reloadModule(mo)
  46.     #reload common
  47.     sb=KBEngine.getResFullPath("common/cfunc.py")
  48.     sb=sb[:-8]
  49.     ll=len(sb)
  50.     for s in KBEngine.listPathRes("common","py"):
  51.         s=s[ll:-3]
  52.         s=s.replace('/','.')
  53.         mo=importlib.import_module(s)
  54.         _reloadModule(mo)
  55.     #reload userType
  56.     sb=KBEngine.getResFullPath("user_type/UserType.py")
  57.     sb=sb[:-11]
  58.     ll=len(sb)
  59.     for s in KBEngine.listPathRes("user_type","py"):
  60.         s=s[ll:-3]
  61.         s=s.replace('/','.')
  62.         mo=importlib.import_module(s)
  63.         _reloadModule(mo)
  64.  
  65.     _reloadAllObjects()
  66.  
  67.  
  68. """
  69. 重载模块,然后把模块里面的需要重载的类全部加
  70. """
  71. def _reloadModule(mo):
  72.     if mo.__name__ in _blackList:
  73.         return
  74.     imp.reload(mo)
  75.     for name,Cls in inspect.getmembers(mo):
  76.         if getattr(Cls,'__reload__',False):
  77.             path=inspect.getsourcefile(Cls)
  78.             g_allClasses[path+Cls.__name__]=Cls
  79.  
  80.  
  81. def _reloadAllObjects():
  82.     delList=[]
  83.     for ref in g_allReloadObjectList:
  84.         obj=ref()
  85.         if obj:
  86.             n=inspect.getsourcefile(obj.__class__)+obj.__class__.__name__
  87.             if n in g_allClasses:
  88.                 obj.__class__=g_allClasses[n]
  89.             else:
  90.                 WARNING_MSG("not find Class "+n)
  91.         else:
  92.             delList.append(ref)
  93.     for ref in delList:
  94.         g_allReloadObjectList.remove(ref)

复制代码

这样就实现了即时切换__class__

并且可以用Tornado做一个类来接受socket命令然后调用globalData通知全部进程热更新
然后在ide里的externalTools里做个发送socket的小工具,并且设置快捷键
然后只要写了点代码后按一下快捷键,服务端所有进程瞬间更新到最新的代码,生活质量提升了不止一个档次

如果谁有更好的热更新方案欢迎补充

kbengine系列教程一 1.先从www.kbengine.org上下载Demo和Kbengine两个项目,这里都用git clone保证项目的最新,不要下载release版本。 例如:我git clone下来了 kbengine_unity3d_warring-0.1.13 和 kbengine-master两个程序。 2.然后下载Mysql 和 Python,下载的版本保持最新。 (1)我下载了M 阅读详情

相关推荐

kbengine脚本编程API

KBEngine Homepage http://www.kbengine.org Releases sources : https://github.com/kbengine/kbengine/releases binarys : https://sourceforge.net/projects/kbengine/files/ Demo sources uni

zhjiancn的专栏 2584

KBEngine里的网络协议另类设计

python可以把函数作为dict类型的value来使用,下面是个简单例子 def fun1(str): print(str) def fun2(no): print(no) dictFun = { 1 : fun1, "2" : fun2 } dictFun[1]("run fun1") dictFun["2"](2) 执行结果 run fun1 2 这样我们就可以设计 https://segmentfault.com/a/1190000010476065

thinbug的专栏 478

KBEngine的服务端底层框架总结

kbengine底层架构很庞大功能很完善。底层采用c++,而写逻辑只需要使用python,大家都知道python是一种开发效率非常高的语言。 网络层被底层封装的很好,在写逻辑的时候几乎可以忘记rpg等细节过程,远程访问非常方便 例如访问客户端的一个远程方法: self.client.func(xxxx) 数据库的读写也变成全自动化了,在一个def文件中对一个实体进行定义底层就能自动建表,自...

Peter的博客 3123

kbengine:简单介绍

之前想分析一个开源服务器很久了,思前想后,还是选择了kbengine。 KBEngine的服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新)。现在服务器大多数是用C++做的,python作脚本也比较多,另外一个就是lua。 kbengine底层架构被设计为多进程分布式动态负载均衡方案, 理论上只需要不断扩展硬件就能够不断增加承载上限,单台机器的承载上限取决于游戏逻辑本身的复杂度。这里对多进程分布式不是很理解,以后再解答。

—— 1万+

kbengine学习心得

最近kbengine很火啊,我们项目也

fortiexue的专栏 2668

StriveGame, Unity5 + kbengine + ULUA(toLua) 一个KBE的Lua热更新客户端demo.zip

StriveGame, Unity5 + kbengine + ULUA(toLua) 一个KBE的Lua热更新客户端demo

使用Unity+KBEngine开发的mmo游戏demo的第二版(Lua热更)

两个月前咱们论坛一个帖子,叫做:这阵子使用kbengine+unity做的游戏(mmo物品系统,装备系统,战斗系统,聊天系统完成),是我的项目哈(感谢坛友帮我推广)。 最近把他lua化了,算是第二版,主要工作是将KBE的客户端插件以及大部分游戏逻辑Lua化,实现客户端热更新。...

chihuan2554的博客 780

Python-KBEngine一款开源的MMOG游戏服务端引擎

一款开源的MMOG游戏服务端引擎,仅Python脚本即可简单高效的完成任何游戏逻辑(支持热更新),

终极KBEngine热更新指南:Python脚本动态重载实战教程

KBEngine是一款强大的开源MMOG服务器引擎,支持Python脚本热更新功能,让开发者可以在不停服的情况下动态修改游戏逻辑。本文将详细介绍KBEngine热更新的核心机制、实现原理和实战应用,帮助你掌握这一强大的开发利器。 ## 🔥 什么是KBEngine热更新? KBEngine热更新是指在游戏服务器运行过程中,动态重新加载Python脚本文件而不需要重启服务器进程。这一功能对于在线

gitblog_01072的博客 354

数据库存储分层架构搭建:热数据 SSD 存储、冷数据归档的配置操作及性能对比分析

本文探讨了数据库存储分层架构的优化策略。随着数据量激增,传统单一存储模式面临成本与性能的平衡难题。文章提出通过热数据SSD加速和冷数据归档降本的分层方案,系统分析了热数据SSD配置、冷数据归档操作及性能对比。分层架构基于数据活跃度匹配存储介质,使热数据保持高性能访问,冷数据低成本存储,实现总体成本降低60%-80%的同时确保核心查询性能。文中详细介绍了硬件选型、数据库配置、数据迁移等技术细节,并强调了动态调整分层策略的重要性,为构建高效经济的数据库存储体系提供了完整解决方案。

jingjing45678的博客 1290

UE4-(IK)实现人物脚贴合地面解决斜坡上脚无旋转无法贴合地面问题

在斜面上脚陷入模型中,需要设置旋转值对脚的骨骼进行一个旋转。 解决思路:在射线检测中可以获取到检测点的法线方向,根据法线方向来计算出脚应该向哪个方向进行适当的旋转,在斜坡上,人物脚需要旋转的轴为x轴和y轴以便来贴合地面,z轴方向的旋转是不需要进行修改的。 如图所示,我们需要求得水平面与斜坡的夹角用来得出人物在x轴上的脚旋转量,在蓝图中提供反正切函数,反正切 = 锐角的邻边/对边 所以 反正切值(脚x轴值(roll)) = 法线Y轴值/法线Z轴 值。 现在将上图的人物想象成面向屏幕,脚需...

Stone的博客 3317

Kbengine介绍

Kbengine游戏引擎前景游戏引擎的底层介绍github地址:Kbengine框架的优缺点:结构介绍:组件介绍: 前景 这里介绍呢,我是在kbengine原代码上有做修改,原基础上只支持webscoket通信,现在添加了http通信和Async实现异步分布式web框架 游戏引擎的底层介绍 kbengine底层架构很庞大功能很完善。底层采用c++,而写逻辑只需要使用python,大家都知道python是一种开发效率非常高的语言,所以你只要写python代码就不用考虑底层如何实现。kbengine底层架构

luobiao_0915的博客 6156

WIFI 相关的频偏调试以及天线调试记录

WIFI RF 相关的频偏调试以及天线调试 1,频率误差(Frequency Error) 频率误差(Frequency Error):表征射频信号偏离该信号所处信道中心频率的大小,单位PPM。频偏误差要求范围如下表。 频偏越小越好。PPM的计算公式如下: 问题: 我们ESP8089认证测试的时候频偏测试超了。需要修改哪些呢。 测试频率点在2.411865385GHz 宣称点:2.412GHz 频率偏移计算:{(2.412GHz-2.411865385GHz)÷2...

armkits的博客 1万+

kbengine源码_GitHub - kbengine/kbengine: A MMOG engine of server.

KBEngineHomepagehttp://kbengine.orgReleasesSources: https://github.com/kbengine/kbengine/releases/latestDemo sourcesUnity3d: https://github.com/kbengine/kbengine_unity3d_demo/releases/latestUnity3d: h...

weixin_35662051的博客 318

别再混淆了!5分钟搞懂机器人导纳控制与阻抗控制的本质区别(附Simulink对比仿真)

本文深入解析机器人柔顺控制中的导纳控制与阻抗控制的本质区别,通过信号流方向、架构对比和应用场景三个关键视角进行详细阐述。文章还提供Simulink对比仿真案例,帮助读者快速理解两种控制策略的差异及其适用场景,特别适合机器人控制领域的研究者和工程师参考。

weixin_42543046的博客 604

数据分析(二):学生成绩预测分析报告

表1 特征变量描述变量描述school学生的学校sex学生的性别age学生的年龄address学生的家庭住址类型famsize家庭规模Pstatus父母同居状况Medu母亲的教育Fedu父亲的教育Mjob母亲的工作Fjob父亲的工作reason选择学校的理由guardian学生监护人traveltime从家到学校的时间studytime每周学习时间failures过去的类失败次数schoolsup额外的教育支持famsup家庭教育支持。

m0_73963149的博客 4415

kbengine调研报告

本文档主要是调研分析新的手游服务端架构,由于自研框架很难直接扩展到未来不同项目上,为公司下几款款手游服务端研发提供可参考的方案。主要的参考点是数据持久化,并发效率,分布式,沙盒机制,热更新机制,研发维护成本。如果从头根据需求开发一款新的服务器架构,需要大量的时间,而且可能会得不偿失,一款...

chupiaoyu8103的博客 204

永磁同步电机MTPA控制详解:从理论到实践的全方位指南

永磁同步电机(PMSM)凭借其高功率密度卓越的效率以及精准的控制性能,已在工业驱动、电动汽车和家用电器等领域获得广泛应用。而在PMSM的诸多控制策略中,最大转矩电流比(MTPA)控制因其能显著提升电机效率而占据核心地位。在输出特定转矩时,通过优化直轴电流(Id)和交轴电流(Iq)的分配,使定子电流的幅值最小化。对于电机测试工程师而言,理解MTPA意味着掌握了一把提升系统性能的关键钥匙。为什么这一点如此重要?因为定子电流的减小直接带来了铜损的降低。

优快云-新能源汽车研发测试专业博主 517

kbengine 源代码读

第一时间更新地址:kbengine bbs 以下摘自百度百科: """ KBEngine是一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端。 服务端底层框架使用c++编写,游戏逻

嗜简如命 7708

某东x-api-eid-token风控参数分析与破解

x-api-eid-token是京东的风控参数,在接口当中,如果没有该参数,有一定的概率能请求成功,但是在请求一段时间后,会报403权限失败的,该参数主要通过jsTk.do这个接口生成,并且会将其存储到cookie当中。

zhouzhou_98的博客 1552

Debezium 性能调优实战:吞吐量、延迟与资源平衡

摘要: 本文分享了团队如何通过系统性调优将Debezium从初始3,200 TPS/2.8秒延迟提升至15,200 TPS/210ms延迟的实战经验。优化涵盖四个层面:1)Debezium连接器配置(批处理、快照并行、消息精简);2)Kafka分区策略与Avro序列化缓存;3)JVM改用ZGC及OS参数调优;4)MySQL的binlog与I/O优化。关键发现包括分区数黄金公式、sync_binlog调整带来56%的I/O负载下降,以及避免盲目增大队列内存等陷阱。最终实现吞吐量提升4.75倍,并强调性能调优需

爱丹丹的博客 358

kbengine主要组件简介

KBEngine的服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新)。现在服务器大多数是用C++做的,python作脚本也比较多,另外一个就是lua。 kbengine主要组件 baseapp,baseappmgr,cellapp,cellappmgr,dbmgr,loginapp,machine。 工作组件: bot,guiconsole,interfaces,logger。 后缀有mgr的组件都是相应的管理器。 数据库用的是mysql,可以考虑一下加上redis。

CaiXinXing的优快云博客 620

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

kbengine怎么样?

Homepage http://www.kbengine.org Releases sources : https://github.com/kbengine/kbengine/releases binarys : https://sourceforge.net/projects/kbengine/files/ Demo sources unity3d : h

killsams的专栏 2313

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

KBEngine调研报告

转自:https://my.oschina.net/u/3599144/blog/1305452 本文档主要是调研分析新的手游服务端架构,由于自研框架很难直接扩展到未来不同项目上,为公司下几款款手游服务端研发提供可参考的方案。主要的参考点是数据持久化,并发效率,分布式,沙盒机制,热更新机制,研发维护成本。如果从头根据需求开发一款新的服务器架构,需要大量的时间,而且可能会得不偿失,一款新的架构稳定都需要时间的。我们应该尝试使用开源的,成熟的,活跃度高的开源框架。正文将先从服务器设计需要考虑的因素..

Peter的博客 1338

让 AI 替你值班:OpenHands Agent Canvas 完整部署与自动化配置全解

OpenHands 是一个可以自部署的 AI 编程代理控制台,正式名称叫 Agent Canvas。它装在你自己的电脑或服务器里,把 OpenHands、Claude Code、Codex、Gemini 这些编码代理统一管理起来:聊天式改代码、按定时任务跑依赖升级、在新 PR 提交时自动做代码评审。和云端 SaaS 不同的是,它跑在你掌控的硬件上,代理有权限访问哪些目录、连哪个模型,全部由你说了算

gitblog_00325的博客 437
上一篇: 使用KBEngine来调度UE4房间服务器的办法
下一篇: 提供一个interface上通过脚本扩展短链接第三方登录的例子(kbengine)
kbengine
博客等级 码龄17年 39粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值