資源簡(jiǎn)介
c# 實(shí)現(xiàn)的熵權(quán)法計(jì)算權(quán)重。并計(jì)算最終綜合得分,有需要的人可以參考
代碼片段和文件信息
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;
????????}
???????
????????///?
????????///?獲取權(quán)重
????????///?
????????///?
????????public?DataTable?GetQuanZhong()
????????{
????????????try
????????????{
????????????????//先去除所有列都為0的行數(shù)據(jù)
????????????????RemoveZeroRows();
????????????????//數(shù)據(jù)標(biāo)準(zhǔn)化????????????????
????????????????var?dtStandard?=?StandardData();
????????????????//獲取指標(biāo)里各條數(shù)據(jù)比重
????????????????var?dtBiZhong?=?GetBiZhong(dtStandard);
????????????????//求各指標(biāo)的信息熵
????????????????var?dtXinXiShang?=?GetXinXiShang(dtBiZhong);
????????????????//求各指標(biāo)的權(quán)重
????????????????return?(GetQZ(dtXinXiShang));
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????throw?new?Exception(“GetQuanZhong?Error!“?+?ex.Message);
????????????}
????????}
????????///?
????????///?獲取綜合得分
????????///?
????????public?DataTable?GetZongHeScore()
????????{
????????????try
????????????{
????????????????//先去除所有列都為0的行數(shù)據(jù)
????????????????RemoveZeroRows();
????????????????//數(shù)據(jù)標(biāo)準(zhǔn)化????????????????
????????????????var?dtStandard?=?StandardData();
????????????????//獲取指標(biāo)里各條數(shù)據(jù)比重
????????????????var?dtBiZhong?=?GetBiZhong(dtStandard);
????????????????//求各指標(biāo)的信息熵
????????????????var?dtXinXiShang?=?GetXinXiShang(dtBiZhong);
????????????????//求各指標(biāo)的權(quán)重
????????????????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并且標(biāo)準(zhǔn)化數(shù)據(jù)
????????????DataTable?dt?=?new?DataTable();
????????????dt.Columns.Add(_dtSource.Columns[0].ColumnName);
????????????for?(int?iColumnIndex?=?1;?iColumnIndex?????????????{
????????????????dt.Columns.Add(_dtSource.Columns[iColumnIndex].ColumnName?typeof(System.Double));
????????????}
????????????for?(int?iRowIndex?=?0;?iRowIndex?????????????{
????????????????var?dr?=?_dtSource.Rows[iRowIndex];
????????????????var?drNew?=?dt.NewRow();
????????????????bool?bIsAllZero?=?true;
????????????????drNew[0]?=?dr[0];
????????????????for?(int?iColumnIndex?=?1;?iColumnIndex?????????????????{
????????????????????if?(dr[iColumnIndex]?!=?DBNull.Value?&&?Convert.ToDouble(dr[iColumnIndex])?!=?0)
??????????????????
評(píng)論
共有 條評(píng)論