ilm
This commit is contained in:
		
							parent
							
								
									041c3211bc
								
							
						
					
					
						commit
						4348f9a222
					
				| @ -30,25 +30,38 @@ func NonLinearCoolingModel(daysDiff int, period string, config map[string]float6 | |||||||
| 
 | 
 | ||||||
| 	// 可配置的系数 | 	// 可配置的系数 | ||||||
| 	timeDecayFactor := config["timeDecayFactor"] // 距今时间因子 | 	timeDecayFactor := config["timeDecayFactor"] // 距今时间因子 | ||||||
| 	periodGranularityFactor := config["periodGranularityFactor"] // 时间框架粒度因子 | 	// periodGranularityFactor := config["periodGranularityFactor"] // 时间框架粒度因子 | ||||||
| 	warmPhaseMultiplier := config["warmPhaseMultiplier"]         // warm阶段乘数 | 	// warmPhaseMultiplier := config["warmPhaseMultiplier"]         // warm阶段乘数 | ||||||
| 	coldPhaseMultiplier := config["coldPhaseMultiplier"]         // cold阶段乘数 | 	// coldPhaseMultiplier := config["coldPhaseMultiplier"]         // cold阶段乘数 | ||||||
| 	deletePhaseMultiplier := config["deletePhaseMultiplier"]     // delete阶段乘数 | 	// deletePhaseMultiplier := config["deletePhaseMultiplier"]     // delete阶段乘数 | ||||||
| 
 | 
 | ||||||
| 	// 距今时间因子:越久远,冷却越快 | 	// 时间衰减因子反转:越新的数据保留越久 | ||||||
| 	timeFactor := 1 - math.Pow(float64(daysDiff), timeDecayFactor)/100 | 	timeFactor := math.Pow(100.0, timeDecayFactor) / math.Pow(float64(daysDiff+1), timeDecayFactor) | ||||||
| 	if timeFactor < 0 { | 	if timeFactor > 1 { | ||||||
| 		timeFactor = 0 | 		timeFactor = 1 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 时间框架因子:粒度越细,冷却越快 | 	// 时间框架因子调整:粒度越细保留时间越长 | ||||||
| 	periodFactor := math.Pow(float64(minutes), periodGranularityFactor) / math.Pow(43200, periodGranularityFactor) | 	periodFactor := math.Pow(float64(minutes)/1440, 0.5) // 基于天数的平方根比例 | ||||||
| 
 | 
 | ||||||
| 	// 计算各个阶段的时间 | 	// 基础保留天数计算(与时间框架成正比) | ||||||
| 	warmDays := int(float64(daysDiff) * warmPhaseMultiplier * timeFactor * periodFactor) | 	baseDays := int(30 * periodFactor) // 30天基础值 | ||||||
| 	coldDays := int(float64(daysDiff) * coldPhaseMultiplier * timeFactor * periodFactor) |  | ||||||
| 	deleteDays := int(float64(daysDiff) * deletePhaseMultiplier * timeFactor * periodFactor) |  | ||||||
| 
 | 
 | ||||||
|  | 	// 阶段持续时间计算(与距今时间成反比) | ||||||
|  | 	warmDays := baseDays + int(float64(1000)/float64(daysDiff+1)) | ||||||
|  | 	coldDays := 2*baseDays + int(float64(2000)/float64(daysDiff+1)) | ||||||
|  | 	deleteDays := 3*baseDays + int(float64(3000)/float64(daysDiff+1)) | ||||||
|  | 
 | ||||||
|  | 	// 保证最小阶段关系 | ||||||
|  | 	if warmDays < baseDays { | ||||||
|  | 		warmDays = baseDays | ||||||
|  | 	} | ||||||
|  | 	if coldDays < 2*baseDays { | ||||||
|  | 		coldDays = 2 * baseDays | ||||||
|  | 	} | ||||||
|  | 	if deleteDays < 3*baseDays { | ||||||
|  | 		deleteDays = 3 * baseDays | ||||||
|  | 	} | ||||||
| 	return warmDays, coldDays, deleteDays | 	return warmDays, coldDays, deleteDays | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 zhangkun9038@dingtalk.com
						zhangkun9038@dingtalk.com