算法导论(第三版)CH15-动态规划习题15-10投资策略规划题目实现详解(附代码)

算法导论习题解-第15章动态规划 #a is topological sorted, a[0] is s, a[-1] is t def longest(a): #d[i] is the longest distance from a[0] to a[i] d = [-INF]*len(a) d[0] = 0 for i in range(1, len(a)): for j in range(i 阅读详情

在算法导论(第三版)第15章动态规划最后的习题中,有一道15-10投资策略规划的题目,网上相关的讲解不是很多,或者算法的时间复杂度也较高,因此将具体实现分享如下。

一、先看题目

二、解题思路

     这道题目其实不用动态规划,也能解的。但既然放在这里,就是给大家练习一下动态规划的思路的,我们就用动态规划的思路来解一下。先看a、b、c 前三个小题目。

第一步:最优子结构

我们假设要计算j年的投资收益,这里有一个隐含的前提,我们一定是在n种投资里面寻找当年收益率最大的那个投资种类,假设:

  1. j-1 年 的选择投资种类为 p(j-1),j-1 年底的 收益 为 e(j-1)
  2. j年投资收益最大的种类 为 p(j),

强调一点,f2>f1, 也就是说转移投资种类的成本是更高的(这也符合金融投资的实际情况)。那么根据是否转移投资,有两种情况:

1、 p(j) == p(j-1) 

此时不需要进行转移投资:j年的收益为:

        e(j) = (e(j - 1) - f1) * r(p(j), j); // r(p(j), j) 代表 j年的最大投资收益率

2、p(j) != p(j-1) 

这时就要进行对比了,分别计算转移和不转移两种情况的收益:

假设:

        t1 = (e(j - 1) - f2) * r(p(j), j);  // 转移投资的收益

        t2 = (e(j - 1) - f1) * r(p(j - 1)), j);   // 不转移的收益,此时投资种类取的是上一年的值

if t1 > t2 : 则 转移投资 ,令:

        e(j) = t1;

else:则无需转移投资,令:

        e(j) = t2;

        p(j) = p(j-1);    // 此时j年的投资种类取 j - 1 年的值。

        从上面的分析可以看出,该问题存在最优子结构,j年的投资收益只和 当年的p(j) 、去年的p(j-1) 的值 有关。以此递推,我们可以求出第2年……直到第m年的e 的值。

        初始条件:第1年的投资收益最简单,直接求出 p(1)后,因为第一年不涉及转移与否, 故第一年的投资收益为:

        e(1)=capital * r[p[1]][1]

第二步:状态转移方程

根据上面的分析,很容易就可以写出状态转移方程了:

e(j)=\begin{cases} capital * r[p[1]][1] & \text{ if } j == 1 \\ (e[j - 1] - f1) * r[p[j]][j] & \text{ if } j > 1 \&\& p(j) == p(j-1) \\ max((e[j - 1] - f1) * r[p[j - 1]][j], (e[j - 1] - f2) * r[p[j]][j]) & \text{ if } j > 1 \&\& p(j) != p(j-1) \end{cases}

第三步:定义dp数组

根据上述分析,在用动态规划思路解决本题目时,需要定义两个dp数组:

p:一维数组,用来保持每年选择的投资种类;

e:一维数组,用来保存每年底收益的值;

以上就是整个的分析思路。同时解决了 a、b 两个问题。c问题请参考下节的代码实现。

最后一个d 问题的分析,因为增加了限制条件,很容易看出,上面的最优子结构分析已经不再适用了,每年的收益只能通过暴力循环求解,因此也不再适用动态规划的解法了。

三、具体算法代码实现( Dart 语言实现)

以下是具体的实现代码,代码经过略微的优化,使用了一些小的编程技巧,以使代码更加的简洁。本代码用 Dart 语言实现,要求 dart-sdk 版本 3.0 以上。代码中注释比较清晰,不再赘述。

(List<int>, List<double>) findInvestStrategy(
    int capital, int kinds, int years, List<List<double>> r, int f1, int f2) {
  // p:每一年选择的投资种类,ens:每年的最大化收益;
  var p = List.filled(years + 1, 0), ens = List.filled(years + 1, 0.0);

  for (var j = 1; j <= years; j++) {
    var q = 1;
    // 遍历每一个类别,寻找收益率最大的那个投资种类
    for (var i = 2; i <= kinds; i++) if (r[i][j] > r[q][j]) q = i;
    p[j] = q;

    // ens[j]表示当前年份的收益率,先假设不切换投资种类时,j年的收益是多少;
    ens[j] = switch (j) {
      1 => capital * r[q][j],
      _ => (ens[j - 1] - f1) * r[p[j - 1]][j]
    };

    // 如果q不等于p[j-1],即j年的最大化投资收益种类不等于上一年,则计算一下切换投资的收益并对比
    if (j > 1 && q != p[j - 1]) {
      // t表示计算一下切换投资的收益
      var t = (ens[j - 1] - f2) * r[q][j];
      if (t > ens[j]) {
        ens[j] = t;
      } else {
        // 意味着不用切换投资种类
        p[j] = p[j - 1];
      }
    }
  }

  return (p, ens);
}

测试如下,投资种类设为4种,年份为5年,构造r值:

void main() {
  var kinds = 4, years = 5, capital = 10000, f1 = 1000, f2 = 1300;
  var r = <List<double>>[
    [0, 0, 0, 0, 0, 0],
    [0, 1.1517, 1.1360, 1.2187, 1.1289, 1.1458],
    [0, 1.1314, 1.0450, 1.1805, 1.1398, 1.1340],
    [0, 1.1609, 1.0235, 1.2591, 1.0688, 1.1298],
    [0, 1.1857, 1.0155, 1.2102, 1.0789, 1.1609]
  ];

  // r.skip(1).forEach((e) => print(e.skip(1).map((e) => e.toStringAsFixed(4))));
  var (p, ens) = findInvestStrategy(capital, kinds, years, r, f1, f2);
  print(p.skip(1));
  print(ens.skip(1).map((e) => e.toStringAsFixed(2)));
}

运行结果如下:

(4, 1, 3, 2, 2)
(11857.00, 11992.75, 13463.24, 13863.67, 14587.40)

四、时间复杂度分析

从上面分析和代码可以看出,本算法的时间复杂度为O\left ( mn \right ),m为年份,n为投资种类。

最后

1、推荐一下 Dart 语言,真的很好用,Dart3.0版本以后,增加了模式匹配等当前Rust语言很流行的很多功能,大大提升了函数式编程的能力;3.1版本发布后,经实测性能还有了巨大的提升。我日常写一些算法的代码,都是用Dart。

2、抽空在看算法导论(补大学荒废的时光😭),刚看到第15章。书中的例子、习题,除了部分构造数据复杂的以外,很多习题我都写了实现,如果有人需要,可以关注我,给我留言,我分享。

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

相关推荐

【管理科学】第三十五篇 企业经营中的管理科学01 权力、风险、运营、物流、人力资源、库存、合同、品牌、业绩、项目

编号类型领域子领域/内容问题问题的数学分析(电磁/信息论/数学物理/数学化学/界面科学/表面科学 + 几何/拓扑/代数/集合论/图论/数论/函数评估/数值估计/概率/统计/向量/张量/矩阵/矢量 + 其他)算法逐步推理思考的数学表达式及实现步骤及时序流程 参数列表及参数的数值范围及数值分析及常量/常数1管理科学问题运营管理生产计划如何分配有限资源生产多种产品以最大化利润?线性代数、凸优化、单纯形法;向量与矩阵目标函数 max c^T x,约束 Ax ≤ b, x ≥ 0。步骤:①标准化引入松弛变量;②构建初

weixin_49199313的博客 247

算法导论第三版 第15章习题答案

15 Dynamic Programming

DavidWang9527的专栏 2万+

算法导论第十五章习题解答

能用代码表示的都用代码表示,不能表示的写出思路,思路都没写的就是我也做不出来

《算法导论3rd第十五章》动态规划

算法导论,第十五章,动态规划,最长公共子序列

懒猫的脚印 2804

算法导论第15章课后习题答案

算法导论第15章-动态规划的课后习题参考答案,对于算法爱好者而言,是不错的参考资料。

LabVIEW调用.so文件的方法

LabVIEW调用.so文件的方法

m0_37878912的博客 3025

含光热电站、有机有机朗肯循环、P2G的综合能源优化调度附Matlab代码

一、系统架构与组成单元1. 光热电站(CSP)功能:利用聚光装置将太阳能转化为热能,通过储热系统(如熔融盐)实现稳定发电,具备调峰能力。关键参数聚光比、集热效率、储热容量、发电效率(汽轮机 + 发电机)。储热时长(如 8-12 小时)决定其出力调节灵活性。2. 有机朗肯循环(ORC)功能:回收低品位热能(如光热电站余热、工业废热)发电,提升系统能效。关键参数工质类型(如异戊烷、R134a)、热源温度(影响循环效率)、发电功率上限。余热回收效率通常为 10%-15%。3. 电转气(P2G)功能。

matlab_daizuo的博客 1094

手把手教你为ArduPilot添加自定义飞行模式:以自动巡检航线为例

本文详细介绍了如何为开源飞控ArduPilot添加自定义飞行模式,并以自动巡检航线为例,提供了从状态机设计、代码实现到地面站集成的完整开发指南。通过七步法手把手教学,帮助开发者深入理解飞控核心逻辑,实现无人机自主执行复杂巡检任务,满足行业应用定制需求。

weixin_29306875的博客 137

电力系统储能优化建模:从风电消纳到容量配置的数学建模实战

储能技术作为解决可再生能源波动性与电网稳定运行矛盾的关键手段,其核心原理在于通过能量的时空转移实现电力系统的功率平衡与能量管理。从技术价值看,储能不仅能提升风电、光伏等间歇性电源的消纳能力,还能通过峰谷套利、辅助服务等模式创造经济收益。在工程实践中,储能系统的优化运行与容量配置通常被抽象为资源调度与投资规划问题,并采用混合整数规划等数学优化方法求解。本文以高比例风电电力系统为背景,深入探讨了如何构建考虑分时电价、弃风惩罚与设备物理约束的精细化模型,并提供了基于典型日聚类与敏感性分析的求解策略,为储能项目的经

weixin_30394981的博客 422

硬件之光实战篇--Boost

当开关管处于关闭状态时,由于电感中的电流在短时间内不能瞬间消失,因此它会产生一个电感电动势,在电容器上加上一个高电压,从而使输出电压变高。--------------------------------------------------------分割线----------------------------------------------------------------在应用中,升压芯片需要根据负载电路的需求,选择合适的电感和电容等元器件,以达到所需要的升压倍数和输出电压。

m0_58664890的博客 2101

交换机救命命令手册:华为 & 思科平台最全运维指令速查表

很多时候,真正拉你一把的不是“高深理论”,而是你手里有没有一份靠得住的命令速查表。这篇文章,希望能成为你“进可调试,退可排障”的一份救命卡片。

HuaweiLab_Peach的博客 1518

ural 1073. Square Country

1073. Square Country Time limit: 1.0 secondMemory limit: 64 MB There live square people in a square country. Everything in this country is square also. Thus, the Square Parliament has pas...

anmob303090的博客 155

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

Matlab实现用户侧储能优化配置与经济性分析

储能系统作为提升电网灵活性与用户经济性的关键技术,其核心原理在于通过能量时移实现价值优化。在工程实践中,这通常被建模为一个复杂的优化问题,涉及功率平衡、设备约束与市场规则。其技术价值在于通过精准的调度策略,最大化电费套利与辅助服务收益,从而缩短投资回报周期。典型的应用场景包括工商业用户的峰谷套利、调频服务响应等。本文聚焦于利用Matlab的优化工具箱,构建混合整数线性规划模型,求解用户侧储能的最优配置与运行策略,其中涉及混合整数线性规划和投资回收期等关键技术的具体实现与调试。

weixin_34110749的博客 447

2025必备:C#上位机自动更新方案,支持断点续传与版本回滚(附完整源码)

摘要:工业上位机自动更新方案解析 本文针对工业现场上位机更新效率低下、风险高的问题,提出了一套完整的自动更新解决方案。该方案包含四个核心模块:版本检测(后台比对版本)、断点下载(支持网络中断续传)、安装更新(自动备份旧版本)和版本回滚(更新失败快速恢复)。通过独立更新工具与主程序解耦的设计,实现了"不影响生产+有退路"的工业级更新要求。方案基于.NET Framework开发,采用HTTP协议通信,包含详细的代码实现和工业场景适配说明,解决了U盘更新效率低、网络不稳定导致下载失败、更新后

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 957

在claude code desktop中安装pdf处理skill的实战教程

本文介绍了在Claude Code Desktop中安装PDF处理Skill的详细教程。针对国内用户使用第三方API时无法直接调用官方插件的问题,提供了完整的解决方案。教程从下载Anthropic官方Skills源码开始,逐步演示了如何将PDF处理模块打包、上传至Claude Code Desktop,并最终成功加载使用。整个过程采用全流程拆解方式,确保新手也能快速上手。通过本文,读者可以掌握在非官方环境下扩展Claude Code功能的方法,从而提升工作效率

weixin_43178406的博客 9万+

Matlab实现用户侧储能优化配置与经济性分析:兼顾峰谷套利与辅助服务

储能系统作为提升电力系统灵活性与经济性的关键技术,其核心原理在于通过能量的时移实现价值创造。在技术层面,储能通过功率和容量的优化配置,能够参与电力市场的多种价值流,包括基础的峰谷电价套利和更高级的电网辅助服务。其技术价值体现在提升能源利用效率、延缓电网投资、以及为新型电力系统提供关键支撑。应用场景已从大型发电侧扩展至工商业用户侧,帮助用户管理电费并参与市场获取收益。本文聚焦于用户侧储能,探讨如何利用Matlab的混合整数线性规划等优化工具,解决储能容量与功率的协同优化问题,以应对峰谷套利与调频服务之间的运行

weixin_30709061的博客 347

Yolov8-pose关键点检测:通用倒瓶颈(UIB)搜索块结合C2f二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块结合C2f二次创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 613

Matlab建模:用户侧储能参与电力辅助服务的优化配置与经济分析

储能系统作为提升电网灵活性与稳定性的关键技术,其核心原理在于通过电能的时空转移实现供需平衡。在电力市场环境下,储能的价值不仅体现在传统的峰谷套利,更在于参与调频、备用等辅助服务市场,获取多元收益。从技术实现角度,这需要构建涵盖物理约束、市场规则与经济目标的混合整数非线性规划模型,通过仿真优化确定储能的最优功率与容量配置。本文聚焦用户侧储能场景,深入探讨了如何利用Matlab进行建模与仿真,协调电费管理与辅助服务收益,为工商业用户提供科学的投资决策工具,其中涉及多时间尺度策略协调与电池衰减等关键工程问题。

weixin_33491377的博客 298

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

电工杯数学建模B题解析:从工业优化到MILP模型实战

数学建模是解决复杂工程优化问题的核心方法,其本质是将现实世界中的多目标、多约束问题转化为可计算的数学模型。从原理上看,线性规划与混合整数线性规划因其成熟的求解理论与高效的求解器,成为处理确定性优化问题的首选技术。在工业能源调度、生产排程等场景中,MILP能有效刻画设备启停、资源分配等离散与连续决策,实现成本最小化或效率最大化等目标。本文以2022年电工杯数学建模竞赛B题为载体,深入剖析如何将实际的“园区综合能源系统优化调度”问题,通过问题拆解、变量定义、约束构建,转化为一个典型的混合整数线性规划问题,并详细

weixin_34054931的博客 333

深度学习工具包 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")

基于Matlab的用户侧储能优化配置与经济性分析实战

储能技术作为提升电力系统灵活性与可靠性的关键手段,其核心原理在于通过能量时移实现供需平衡。在工程实践中,优化配置是释放储能技术价值、确保项目经济性的核心环节,尤其对于参与电力市场的用户侧储能系统。这涉及到对目标函数(如净现值最大化)、决策变量(功率、容量)与多重约束(物理、市场、运行)的系统性建模。Matlab凭借其强大的优化工具箱与数值计算能力,为求解此类混合整数线性规划问题提供了高效平台,能够有效处理削峰填谷与辅助服务收益的耦合,并评估电池退化等长期成本。本文聚焦于用户侧储能参与调频等辅助服务市场的场景

weixin_34354945的博客 457

efm32 入门.pdf

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

上一篇: Cargo包管理器的简单介绍
下一篇: 算法导论16章贪心算法习题活动教室分配问题(区间图着色问题)分析详解与代码实现
Codevalley
博客等级 码龄9年 22粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值