/// <summary>
        /// 指定の金の保有量になったら、指定の資源を指定の保有量になるまで売ります
        /// </summary>
        /// <param name="commodity">売る資源</param>
        /// <param name="needGoldAmount">必要な金の保有量</param>
        /// <param name="LimitationAmount">買いをやめる資源の保有量</param>
        public BuyShortageCommodity(commodity commodity, short needGoldAmount, short LimitationAmount)
        {
            AIFactRelOp buyCommodityAmount = commodity switch {
                commodity.food => new food_amount(relop.le, LimitationAmount),
                commodity.stone => new stone_amount(relop.le, LimitationAmount),
                commodity.wood => new wood_amount(relop.le, LimitationAmount),
                _ => throw new Exception(),
            };

            Facts.Add(
                new can_buy_commodity(commodity),
                new gold_amount(relop.ge, needGoldAmount),
                buyCommodityAmount
                );
            Actions.Add(new buy_commodity(commodity));
        }
        /// <summary>
        /// 指定の保有量になった資源を、指定の金の保有量になるか指定の保有量以下になるまで売ります
        /// </summary>
        /// <param name="commodity">売る資源</param>
        /// <param name="needAmount">必要な資源の保有量</param>
        /// <param name="LimitationGoldAmount">売りをやめる金の保有量</param>
        public SellSurplusCommodity(commodity commodity, short needAmount, short LimitationGoldAmount)
        {
            AIFactRelOp sellCommodityAmount = commodity switch {
                commodity.food => new food_amount(relop.ge, needAmount),
                commodity.stone => new stone_amount(relop.ge, needAmount),
                commodity.wood => new wood_amount(relop.ge, needAmount),
                _ => throw new Exception(),
            };

            Facts.Add(
                new can_sell_commodity(commodity),
                new gold_amount(relop.le, LimitationGoldAmount),
                sellCommodityAmount
                );
            Actions.Add(new sell_commodity(commodity));
        }