C#,数值计算——Dynpro的计算方法与源程序

news2024/11/24 11:23:06

 

给定向量nstate,其整数值是每个状态中的状态数阶段(第一和最后阶段为1),并给定函数成本(j,k,i)返回在阶段i的状态j和的状态k之间移动的成本阶段i+1,此例程返回与nstate长度相同的向量包含最低成本路径的状态号。状态数从0开始,并且返回向量的第一个和最后一个分量将因此总是0。

Given the vector nstate whose integer values are the number of states in each stage(1 for the first and last stages), and given a function cost(j, k, i)that returns the cost of moving between state j of stage i and state k ofstage i+1, this routine returns a vector of the same length as nstatecontaining the state numbers of the lowest cost path. States number from 0,and the first and last components of the returned vector will thus always be 0.

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// Given the vector nstate whose integer values are the number of states in each
    /// stage(1 for the first and last stages), and given a function cost(j, k, i)
    /// that returns the cost of moving between state j of stage i and state k of
    /// stage i+1, this routine returns a vector of the same length as nstate
    /// containing the state numbers of the lowest cost path. States number from 0,
    /// and the first and last components of the returned vector will thus always be 0.
    /// </summary>
    public abstract class Dynpro
    {
        public Dynpro()
        {
        }

        public abstract double cost(int jj, int kk, int ii);

        public int[] dynpro(int[] nstate)
        {
            const double BIG = 1.0e99;
            const double EPS = float.Epsilon; //numeric_limits<double>.epsilon();
            int nstage = nstate.Length - 1;
            int[] answer = new int[nstage + 1];
            if (nstate[0] != 1 || nstate[nstage] != 1)
            {
                throw new Exception("One state allowed in first and last stages.");
            }

            double[,] best = new double[nstage + 1, nstate[0]];
            best[0, 0] = 0.0;
            for (int i = 1; i <= nstage; i++)
            {
                for (int k = 0; k < nstate[i]; k++)
                {
                    double b = BIG;
                    for (int j = 0; j < nstate[i - 1]; j++)
                    {
                        double a = best[i - 1, j] + cost(j, k, i - 1);
                        if ((a) < b)
                        {
                            b = a;
                        }
                    }
                    best[i, k] = b;
                }
            }
            answer[nstage] = answer[0] = 0;
            for (int i = nstage - 1; i > 0; i--)
            {
                int k = answer[i + 1];
                double b = best[i + 1, k];
                int j = 0;
                for (; j < nstate[i]; j++)
                {
                    double temp = best[i, j] + cost(j, k, i);
                    if (Math.Abs(b - temp) <= EPS * Math.Abs(temp))
                    {
                        break;
                    }
                }
                answer[i] = j;
            }
            return answer;
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/871163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(8)

1005 0 vs 1 双端队列暴力模拟,时间复杂度为O(n*T) 首先预处理0的右边第一个0的下标,1的右边第一个1的下标,0的左边第一个0的下标,1的左边第一个1的下标 然后进行模拟 如果当前是zero的轮次,那么就看双端队列的两端 如果两头都是1,那么one赢,如果1头是0,1头是1,那么只能选择0 如…

概率图模型(Probabilistic Graphical Model,PGM)

概率图模型&#xff08;Probabilistic Graphical Model&#xff0c;PGM&#xff09;&#xff0c;是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布&#xff0c;进行有效的推理和学习&#xff0c;以及解决各种实际问题&#xff0c;如图…

计算机基础概论

一、计算机的组成 1.计算机组成的五大部件 &#xff08;1&#xff09;运算器&#xff1a;也叫算术逻辑单元&#xff0c;完成对数据的各种常规运算&#xff0c;如加减乘除&#xff0c;也包括逻辑运算&#xff0c;位移&#xff0c;比较等。 &#xff08;2&#xff09;控制器&a…

掌握Python的X篇_34_Python朗读文字

各种广告中说python是人工智能的主宰&#xff0c;其实这更多是噱头的成分&#xff0c;但是python确实可以做很多的事情&#xff0c;本篇将会介绍利用pythonAI平台来合成声音。今天将会用到的是百度。 文章目录 1. baiToVoice2. 注册appid3. 合成代码 1. baiToVoice 使用百度A…

详解Mysql——第一篇/连接查询

mysql的连接查询&#xff0c;相必在网上都能找到很多的教程&#xff0c;博主今天不做老话常谈&#xff0c;不走重复路线 1.建表 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id) – –课程编…

ubuntu18.04下配置muduoC++11环境

1.安装muduo依赖的编译工具及库 Cmake sudo apt-get install cmakeBoost sudo apt-get install libboost-dev libboost-test-devcurl、c-ares DNS、google protobuf sudo apt-get install libcurl4-openssl-dev libc-ares-dev sudo apt-get install protobuf-compiler libp…

【单片机毕业设计2-基于stm32c8t6的智能台灯/书桌系统】

【单片机毕业设计2-基于stm32c8t6的智能台灯/书桌系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇2 基于stm32的智能台灯/智能书桌系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖&#xff08;有需可点击…

JavaWeb中Json传参的条件

JavaWeb中我们常用json进行参数传递 对应的注释为RequestBody 但是json传参是有条件的 最主要是你指定的实体类和对应的json参数能否匹配 1.属性和对应的json参数名称对应 2.对应实体类实现了Serializable接口&#xff0c;可以进行序列化和反序列化&#xff0c;这个才是实体类转…

【Minecraft】Fabric Mod开发完整流程4 - 自定义物品方块以及食物、燃料

目录 自定义物品与方块自动侦测矿藏工具工具功能实现执行结果 自定义音乐方块自定义食物自定义燃料 自定义物品与方块 自动侦测矿藏工具 探测器纹理下载地址&#xff1a; https://url.kaupenjoe.net/mbkj57/assets 众所周知&#xff0c;正经人永远不喜欢常规套路挖矿&#xff0…

一种改进的低导通电阻和开关损耗4H-SiC沟槽栅MOSFET

目录 标题&#xff1a;An Improved 4H-SiC Trench-Gate MOSFET With Low ON-Resistance and Switching Loss摘要信息解释ICP-RIELPCVDac电容的串并联 研究了什么文章的创新点文章的研究方法文章的结论 标题&#xff1a;An Improved 4H-SiC Trench-Gate MOSFET With Low ON-Resi…

阿里云账号注册入口_账户注册详细流程(图文)

阿里云账号怎么注册&#xff1f;阿里云账号支持手机号注册、阿里云APP注册、支付宝和钉钉多种注册方式&#xff0c;账号注册后需要通过实名认证才可以购买或使用云产品&#xff0c;阿里云百科来详细说下不同途径注册阿里云账号图文流程&#xff1a; 目录 阿里云账号注册流程 …

考虑分布式电源的配电网无功优化问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ubuntu18.04安装NFS并启动NFS(mount挂载)

首先得把虚拟机网络更改成桥接模式&#xff0c;并把网段设置成与Windows同一网段&#xff0c;可以参考我的这篇博文http://t.csdn.cn/kRmNl ubuntu18.04安装NFS并启动NFS 终端输入指令&#xff1a;sudo apt install nfs-kernel-server 在ubuntu 18.04 下创建一个mount 共享的…

从C语言到C++_32(哈希的应用)位图bitset+布隆过滤器+哈希切割

目录 1. 位图 1.1 位图的概念 1.2 位图的实现 1.3 位图解决海量数据面试题 完整BitSet.h和two_bitset: 1.4 位图的优缺点 2. 布隆过滤器 2.1 布隆过滤器的概念 2.2 布隆过滤器的实现 完整 BloomFilter.h 和测试 2.3 布隆过滤器的优缺点和应用 3. 哈希切割&#xff…

AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理

大家好&#xff0c;我是风雨无阻。 本文适合人群&#xff1a; 想要了解AI绘图基本原理的朋友。 对Stable Diffusion AI绘图感兴趣的朋友。 本期内容&#xff1a; Stable Diffusion 能做什么 什么是扩散模型 扩散模型实现原理 Stable Diffusion 潜扩散模型 Stable Diffu…

克隆你的声音,只需要你 5 秒钟的语音,就能生成你说出来的任何话,免费开源使用,细思极恐

克隆你的声音,只需要你 5 秒钟的语音,就能生成你说出来的任何话,免费开源使用,细思极恐。可联系作者帮忙部署使用。 Voice Cloning This repository is an implementation of Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis (SV…

AcWing算法提高课-5.1.1哥德巴赫猜想

宣传一下 算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 哥德巴赫猜想的内容如下&#xff1a; 任意一个大于 4 4 4 的偶数都可以拆成两个奇素数之和。 例如&#xff1a; 8 3 5 8 3 5 835 20 3 17 7 13 20 3 17 7 13 20317713 …

多线程与高并发--------原子性、可见性、有序性

二、并发编程的三大特性 一、原子性 1.1 什么是并发编程的原子性 JMM&#xff08;Java Memory Model&#xff09;。不同的硬件和不同的操作系统在内存上的操作有一定差异的。Java为了解决相同代码在不同操作系统上出现的各种问题&#xff0c;用JMM屏蔽掉各种硬件和操作系统带…

腾讯云CVM服务器2核2g1m带宽支持多少人访问?

腾讯云2核2g1m的服务器支持多少人同时访问&#xff1f;2核2g1m云服务器短板是在1M公网带宽上&#xff0c;腾讯云服务器网以网站应用为例&#xff0c;当大规模用户同时访问网站时&#xff0c;很大概率会卡在公网带宽上&#xff0c;所以压根就谈不上2核2G的CPU内存计算性能是否够…

[管理与领导-11]:IT基层管理者 - 目标与落实 - 过程管理失控,结果总难达成的问题思考:如何把过程管控做得更好?

目录 前言&#xff1a; 第1章 问题与现象 1.1 总有意想不到的事发生&#xff1a;意外事件 1.2 总有计划变更&#xff1a;意外影响 1.3 总有一错再错&#xff0c;没有复盘、总结与反思&#xff0c;没有流程与改进 第2章 背后的原因 2.1 缺乏及时的过程检查 - 缺乏异常检测…