【教程9】OptaPlanner优化算法选择指南【建议收藏必看】

APS开源源码解读: 排程工具 optaplanner 也即是说,先定义对象“entityClass”, 转化为约束“constraintProviderClass”,然后运用 constructionHeuristic + localSearch的方式进行求解。工序叫做Job,job跟着若干project。在APP类继承的solution中,示例采用的是schedule,也就是planningsolution,作为问题和排产结果。其中,一个整体的任务叫做project, 资源有可再生,非可再生。Solver job接受到problem,开始run。 阅读详情

OptaPlanner优化算法优化算法

1. 现实世界中的搜索空间大小

对于规划问题来说,可能的解的数量令人难以置信。

例如:

  • 四皇后问题有256个可能的解(4^4)和两个最优解。

  • 五皇后问题有3125个可能的解(5^5)和一个最优解。

  • 八皇后问题有16777216个可能的解(8^8)和92个最优解。

  • 64皇后问题有超过10115个可能的解(6464)。

  • 大多数现实生活中的规划问题都有巨大数量的可能解,但只有一个或少数几个最优解。

作为比较:已知宇宙中最小的原子数量是10^80。随着规划问题的增大,搜索空间往往会迅速扩大。添加一个额外的规划实体或规划值可能会大大增加某些算法的运行时间。

cloudBalanceSearchSpaceSize

计算可能解的数量取决于领域模型的设计:

searchSpaceSizeCalculation

注意:此搜索空间大小计算包括不可行解(如果可以用模型表示),因为:

  • 最优解可能是不可行的。

  • 有许多类型的硬约束无法在公式中实际地结合起来。例如,在云平衡中,尝试将CPU容量约束纳入公式中。

即使在公式中实际上加入了一些硬约束的情况下(例如,课程排课),得到的搜索空间仍然非常庞大。

一个检查每个可能解的算法(即使进行修剪,如分支界限法)在单个现实生活中的规划问题上也可以运行数十亿年。目标是在可用时间内找到最佳解决方案。规划比赛(如国际排课比赛)表明,在现实世界的时间限制下,局部搜索变体(禁忌搜索、模拟退火、晚期接受等)通常表现最好。

2. OptaPlanner能否找到最优解?

企业希望获得最优解,但他们还有其他要求:

  • 扩展:大型生产数据集不能崩溃,并且结果也要好。

  • 优化正确的问题:约束条件必须与实际业务需求相匹配。

  • 可用时间:必须在执行变得无用之前及时找到解决方案。

  • 可靠性:每个数据集至少必须具有体面的结果(优于人类规划者)。

考虑到这些要求,尽管有些销售员的承诺,对于任何人或任何事物来说,找到最优解通常是不可能的。因此,OptaPlanner专注于在可用时间内找到最佳解决方案。在“现实独立的竞争”中,它通常是最好的可重用软件。

NP完全问题的性质使得扩展成为一个主要问题。

**注意:**从小数据集中得到的结果的质量无法说明从大数据集中得到的结果的质量。

规模问题不能通过以后购买硬件来缓解。尽快使用生产大小的数据集进行测试。不要根据小数据集评估质量(除非生产只遇到此类数据集)。相反,解决一个生产大小的数据集,并比较更长时间运行、不同算法以及(如果有的话)人工规划者的结果。

3. 架构概述

OptaPlanner是第一个将优化算法(元启发式算法等)与规则引擎(如Drools)结合使用的框架。这种组合非常高效,因为:

  • 像Drools这样的规则引擎非常适合计算规划问题的解的得分。它可以轻松地添加额外的软约束或硬约束,而且具有良好的可扩展性。它可以进行增量得分计算(增量),而无需任何额外的代码。然而,它往往不适合找到新的解决方案。

  • 优化算法非常擅长在不必要地穷尽每种可能性的情况下找到改进的解决方案。然而,它需要知道一个解决方案的得分,并且在高效计算得分方面没有提供支持。

architectureOverview

4. 优化算法概述

OptaPlanner支持三类优化算法:穷举搜索、构造启发式算法和元启发式算法。在实践中,元启发式算法(结合构造启发式算法进行初始化)是推荐的选择:

scalabilityOfOptimizationAlgorithms这些算法类别中

每一类都有多个优化算法:

表1. 优化算法概述

算法 可扩展 最优解 易于使用 可调整 需要CH
穷举搜索(ES)
Brute Force 0/5 5/5 5/5 0/5 No
Branch And Bound 0/5 5/5 4/5 2/5 No
构造启发式算法(CH)
First Fit 5/5 1/5 5/5 1/5 No
First Fit Decreasing 5/5 2/5 4/5 2/5 No
Weakest Fit 5/5 2/5 4/5 2/5 No
Weakest Fit Decreasing 5/5 2/5 4/5 2/5 No
Strongest Fit 5/5 2/5 4/5 2/5 No
Strongest Fit Decreasing 5/5 2/5 4/5 2/5 No
Cheapest Insertion 3/5 2/5 5/5 2/5 No
Regret Insertion 3/5 2/5 5/5 2/5 No
元启发式算法(MH)
局部搜索(LS)
Hill Climbing 5/5 2/5 4/5 3/5 Yes
Tabu Search 5/5 4/5 3/5 5/5 Yes
Simulated Annealing 5/5 4/5 2/5 5/5 Yes
Late Acceptance 5/5 4/5 3/5 5/5 Yes
Great Deluge 5/5 4/5 3/5 5/5 Yes
Step Counting Hill Climbing 5/5 4/5 3/5 5/5 Yes
Variable Neighborhood Descent 3/5 3/5 2/5 5/5 Yes
进化算法(EA)
Evolutionary Strategies 3/5 3/5 2/5 5/5 Yes
Genetic Algorithms 3/5 3/5 2/5 5/5 Yes

要了解有关元启发式算法的更多信息,请参阅《元启发式算法基础》或《聪明的算法》。

5. 我应该使用哪些优化算法?

最佳的优化算法配置取决于您的用例。然而,以下基本步骤提供了一个良好的起始配置,可以产生高于平均水平的结果。

  1. 首先使用快速配置,其中包含很少或没有配置和优化代码:参见首次适应法。

  2. 接下来,实现规划实体的难度比较,并将其转换为递减的首次适应法。

  3. 然后,在其后面添加晚期接受:

    a.递减的首次适应法。

    b.晚期接受。

此时,投资时间的回报降低,结果可能已经足够了。

**但是,**这可以在更低的投资回报率下改进。使用Benchmarker尝试一些不同的禁忌搜索、模拟退火和晚期接受配置,例如:

递减的首次适应法:禁忌搜索。

使用Benchmarker来改进大小参数的值。

还可以运行其他实验。例如,可以将以下多个算法组合在一起:

  1. 递减的首次适应法

  2. 晚期接受(相对较长时间)

  3. 禁忌搜索(相对较短时间)

6. 功率调整或默认参数值

许多优化算法具有影响结果和可扩展性的参数。OptaPlanner应用例外配置,因此所有优化算法都具有默认参数值。这与JVM中的垃圾回收参数非常相似:大多数用户无需调整它们,但高级用户经常需要。

默认参数值对于许多情况(尤其是原型)已经足够了,但如果开发时间允许,可以使用Benchmarker对特定用例进行功率调整,以获得更好的结果和可扩展性。每个优化算法的文档还声明了用于功率调整的高级配置。

参数的默认值会在次要版本之间更改,以便为大多数用户改进它们。高级配置可以用于防止不希望的更改,但不建议这样做。

7. 求解器阶段

求解器可以按照顺序使用多个优化算法。每个优化算法由一个求解器阶段表示。永远不会同时有多个阶段进行求解。

**注意:**一些阶段的实现可以结合多种优化算法的技术,但仍然只是一个阶段。例如:本地搜索阶段可以使用模拟退火和实体禁忌搜索。

以下是一个按顺序运行三个阶段的配置示例:

<solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd">
  ...
  <constructionHeuristic>
    ... <!-- 第一个阶段:首次适应降序 -->
  </constructionHeuristic>
  <localSearch>
    ... <!-- 第二个阶段:后期接受 -->
  </localSearch>
  <localSearch>
    ... <!-- 第三个阶段:禁忌搜索 -->
  </localSearch>
</solver>

求解器阶段按照求解器配置定义的顺序运行。

  • 当第一个阶段结束时,第二个阶段开始运行,依此类推。

  • 当最后一个阶段结束时,求解器终止。

通常,求解器会先运行一个构造启发式算法,然后运行一个或多个元启发式算法:

generalPhaseSequence

如果没有配置阶段,OptaPlanner将默认运行一个构造启发式算法阶段,然后是一个本地搜索阶段。

某些阶段(尤其是构造启发式算法)会自动终止。其他阶段(尤其是元启发式算法)只有在配置了终止条件时才会终止:

<solver 
optaplanner学习笔记(六)使用Solver求解器 运筹优化平台optaplanner 阅读详情

相关推荐

【教程21】OptaPlanner开发指南方法论

OptaPlanner开发指南方法论

wang2leee的博客 1362

OptaPlanner学习记录1

OptaPlanner

m0_46512427的博客 2274

大数据领域规范性分析的技术与工具推荐

小时候玩拼图,第一步是“把所有碎片倒出来”(收集数据),第二步是“看看碎片长什么样”(描述性分析,比如“这个碎片是蓝色的,像天空”),第三步是“猜这个碎片应该放在哪里”(预测性分析,比如“蓝色碎片可能在右上角”),最后一步是“把碎片拼对”(规范性分析,比如“应该把蓝色碎片放在这里,因为它和旁边的碎片吻合”)。描述性分析:回答“发生了什么?”(比如“上周电商平台销量下降了10%”);预测性分析:回答“可能发生什么?”(比如“下个月销量可能再降5%,因为竞品在搞活动”);规范性分析:回答“应该怎么做?

2501_92132293的博客 1022

物流配送路径优化管理系统:基于Java的算法集成与实现

首先定义系统所需的核心数据结构:java// 位置点定义// 配送点定义// 时间窗口// 车辆定义// 路径定义。

2201_76125393的博客 211

optaplanner, Java约束求解器解决车辆布线员工排班及其他规划问题.zip

optaplanner, Java约束求解器解决车辆布线员工排班及其他规划问题 OptaPlannerwww.optaplanner.org快速开发开始要生成并从源代码运行,请执行以下操作:$ mvn clean install -DskipTests$ cd optaplanner-example

保姆级教程:用COMSOL LiveLink™ for MATLAB 玩转自定义PDE,从理论到仿真一条龙

本文详细介绍了如何利用COMSOL LiveLink™ for MATLAB实现自定义PDE的从理论到仿真的完整流程。通过PDE模块与MATLAB的无缝集成,用户可以灵活处理非标准偏微分方程,适用于材料建模、传热传质验证等多物理场耦合研究。教程涵盖环境配置、方程标准化、界面操作及高级应用技巧,为工程仿真研究者提供原子级控制方案。

weixin_34098209的博客 355

YOLOv5s模型训练全流程解析:从数据准备到实战检测

本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。

weixin_29041767的博客 334

Ubuntu20.04安装Ceres库

ceres真难安装。

little_white138的博客 8380

PLC为西门子的S7-1200,舵机为 DS3218,PLC控制舵机旋转程序实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 999

深度解构事务码 SQF:Support Query Framework 与 ABAP 静态分析实战

某制造企业在年度审计前,需要确认自定义发票过账程序 ZFI_INV* 系列是否存在硬编码公司代码与未捕获异常。技术团队在字段填入ZFI_INV*后,勾选与规则,执行扫描。SQF 生成的 ALV 报告列出 42 个警告,其中 17 条与抛出 CX_SY_NO_HANDLER 相关,8 条涉及动态 SQL 注入风险。结果导出至 Excel 供开发整改,并在 ATC 阶段验证修复。此过程较手工逐个执行 Code Inspector 节省超 80 % 时间。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 218

KEPServerEX 6 之 EX 6.11.718.0 发布说明

KEPServerEX 6.11.718.0 发布说明

-雲飛兄-博客 2882

在 ABAP SEGW OData 服务里,把 Function Import 参数长度校验真正跑起来

SAP Gateway服务中Function Import参数长度校验的实现机制解析:在SEGW中定义Max Length参数后,需通过模型特性USE_STRICT_FUNCTION_PARAM_CHK(7.52+版本支持)启用严格检查。该特性需在MPC_EXT的DEFINE方法中设置,框架会在URI解析阶段拦截超长参数,避免错误进入业务逻辑。对于低版本系统,建议在应用层手动添加校验。这种模型驱动的方式符合Clean Core原则,能有效提升接口健壮性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 493

FLUENT 软件中design modeler网格划分后,导出失败:系统显示“在网格文件导出过程中出现异常。请将数据发送给您的技术支持供应商。”...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1474

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 【教程12】OptaPlaner构造启发式算法
下一篇: 【ortools源码系列4】ortools cp_model_presolve cp_model_postsolve model_solver用法功能源码分析
BigDataMLApplication
博客等级 码龄11年 7363粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值