• 大小: 9KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C#
  • 标签: 熵权法  

资源简介

c# 实现的熵权法计算权重。并计算最终综合得分,有需要的人可以参考

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace CRIC.ShangQuanFa
{
    public class ShangQuanFa
    {
        System.Data.DataTable _dtSource;
        public ShangQuanFa(System.Data.DataTable dt)
        {
            _dtSource = dt;
        }
       
        /// 
        /// 获取权重
        /// 

        /// 
        public DataTable GetQuanZhong()
        {
            try
            {
                //先去除所有列都为0的行数据
                RemoveZeroRows();

                //数据标准化                
                var dtStandard = StandardData();

                //获取指标里各条数据比重
                var dtBiZhong = GetBiZhong(dtStandard);
                //求各指标的信息熵
                var dtXinXiShang = GetXinXiShang(dtBiZhong);
                //求各指标的权重
                return (GetQZ(dtXinXiShang));
            }
            catch (Exception ex)
            {
                throw new Exception(“GetQuanZhong Error!“ + ex.Message);
            }
        }
        /// 
        /// 获取综合得分
        /// 

        public DataTable GetZongHeScore()
        {
            try
            {
                //先去除所有列都为0的行数据
                RemoveZeroRows();

                //数据标准化                
                var dtStandard = StandardData();

                //获取指标里各条数据比重
                var dtBiZhong = GetBiZhong(dtStandard);
                //求各指标的信息熵
                var dtXinXiShang = GetXinXiShang(dtBiZhong);
                //求各指标的权重
                var dtQuanZhong = GetQZ(dtXinXiShang);

                //获取综合得分
                var dtScore = GetScore(dtQuanZhong dtBiZhong);               

                return dtScore;
            }
            catch (Exception ex)
            {
                throw new Exception(“GetZongHeScore Error!“ + ex.Message);
            }
        }

        /// 
        /// 清除所有列都为0的行
        /// 

        void RemoveZeroRows()
        {
            //去除全0并且标准化数据
            DataTable dt = new DataTable();
            dt.Columns.Add(_dtSource.Columns[0].ColumnName);
            for (int iColumnIndex = 1; iColumnIndex < _dtSource.Columns.Count; iColumnIndex++)
            {
                dt.Columns.Add(_dtSource.Columns[iColumnIndex].ColumnName typeof(System.Double));
            }

            for (int iRowIndex = 0; iRowIndex < _dtSource.Rows.Count; iRowIndex++)
            {
                var dr = _dtSource.Rows[iRowIndex];
                var drNew = dt.NewRow();
                bool bIsAllZero = true;
                drNew[0] = dr[0];
                for (int iColumnIndex = 1; iColumnIndex < _dtSource.Columns.Count; iColumnIndex++)
                {
                    if (dr[iColumnIndex] != DBNull.Value && Convert.ToDouble(dr[iColumnIndex]) != 0)
                  

评论

共有 条评论

相关资源