运筹学01规划c语言代码大全,C语言实现运筹学中的马氏决策算法实例

C语言实现运筹学中的马氏决策算法实例

发布时间:2020-08-23 02:14:50

来源:脚本之家

阅读:120

作者:reghi

本文实例讲述了C语言实现运筹学中的马氏决策算法。分享给大家供大家参考,具体如下:

一、概述

马氏决策(Markov decision)是马尔可夫决策过程(Markov Decision Processes,简记为MDP)的简称,是研究随机序贯决策问题的一门重要理论。马氏决策是一类可连续进行观察的随机动态系统的最优化决策,它将(确定性)动态规划与马尔可夫过程相结合,是随机离散事件动态系统惟一的动态控制方法。

关于马氏决策的具体说明可参考百度百科:https://baike.baidu.com/item/%E9%A9%AC%E6%B0%8F%E5%86%B3%E7%AD%96

二、实现代码

#include

#include

#define N 100

float p[N][N],s[N][N],a[N],b[N];

int o;

void set_TPM() //输入转移概率矩阵(Transition Probability Matrix)

{ int i,j;

printf("Please input Number of State:");

scanf("%d",&o);

for(i=0;i

for(j=0;j

{

printf("Please input state%d,state%d:",i,j);

scanf("%f",&p[i][j]);

rewind(stdin);

}

}

void set_Initial_Prob() //输入初始概率状态(Initial Probability)

{

int i;

for(i=0;i

{

printf("Please input state%d Initial Prob:",i);

scanf("%f",&a[i]);

rewind(stdin);

}

}

void run_Markov(int count) //Markov主算法

{

int i,j,k;

float c[N];

for(i=0;i

for(k=0;k

{

for(i=0;i

for(j=0;j

{

s[i][j]=p[i][j]*c[i];

}

for(i=0;i

{

b[i]=0;

for(j=0;j

{

b[i]=b[i]+s[j][i];

}

c[i]=b[i];

}

}

for(i=0;i

}

void print_Result() //输出周期结果

{

int i,j;

for(i=0;i

for(j=0;j

{

printf(" %f",s[i][j]);

if(j==2) printf("/n");

}

for(i=0;i

{

printf(" %f",b[i]);

}

printf("/n");

}

main() //主函数

{

int a,count,i,j;

for(count=0;;)

{

printf("Create New Project:/n");

set_TPM();

set_Initial_Prob();

for(;;)

{

printf("***********************************/n"); //展示选择菜单

printf("1.Times periods from initial./n");

printf("2.Next Period./n");

printf("3.Create New Porject./n");

printf("4.Exit./n/n");

printf("**********************************/n");

printf("Please input your choose:/n");

scanf("%d",&a);

rewind(stdin);

if(a==3) break;

switch(a)

{

case 1:

printf("Input number of time periods from initial:/n");

scanf("%d",&count);

rewind(stdin);

run_Markov(count);

print_Result();

break;

case 2:

run_Markov(count++);

print_Result();

break;

case 4: exit(1);

default: printf("Error choose!!/n");break;

}

}

}

system("pause");

}

希望本文所述对大家C语言程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值