Как решить проблему TypeError: невозможно сериализовать объект '_io.BufferedWriter'? - PullRequest
0 голосов
/ 23 октября 2019
    import pyomo
    from multiprocessing import Pool
    class a():
      def __init__():
         self.df1 = pd.DataFrame({"T": self.T})
         self.df2 = pd.DataFrame({"N": [1]})
         self.writer = pd.ExcelWriter("optdata.xlsx", engine='xlsxwriter')
         self.df1.to_excel(self.writer, sheet_name='Sheet1', index=False, startcol=0)
         self.df2.to_excel(self.writer, sheet_name='Sheet1', index=False, startcol=0 + len(self.df1.T))
         self.workbook = self.writer.book
         self.workbook.define_name('T', '=Sheet1!$A$1:$A$25')
         self.workbook.define_name('N', '=Sheet1!$B$1:$B$2')
         self.writer.save()

         self.df3 = pd.DataFrame({"T": self.T})
         self.df4 = pd.DataFrame({"N": [1]})
         self.writer = pd.ExcelWriter("optdata1.xlsx", engine='xlsxwriter')
         self.df3.to_excel(self.writer, sheet_name='Sheet1', index=False, startcol=0)
         self.df4.to_excel(self.writer, sheet_name='Sheet1', index=False, startcol=0 + len(self.df3.T))
         self.workbook = self.writer.book
         self.workbook.define_name('T', '=Sheet1!$A$1:$A$25')
         self.workbook.define_name('N', '=Sheet1!$B$1:$B$2')
         self.writer.save()

         self.pool = Pool(processes = 2)
         self.p1 = self.pool.map(self.createmodel, range(1))
         self.p2 = self.pool.map(self.createmodel1, range(1))

      def createmodel(self, num):
         self.model = Abstractmodel()
         self.model.T = Set()
         self.model.N = Set()

         self.model.p = Param(self.model.N, self.model.T)

         self.data = DataPortal(model=self.model)
         self.data.load(filename="optdata.xlsx", range="T", format="set", set="T")
         self.data.load(filename="optdata.xlsx", range="N", format="set", set="N")
         self.data.load(filename="optdata.xlsx", range="p", param="p", format="array")

         self.data.flow = Var(self.model.N, self.model.T)

         self.instance = self.model.create_instance(self.data)
         self.instance.pprint()

      def createmodel1(self, num):
         self.model1 = Abstractmodel()
         self.model1.T = Set()
         self.model1.N = Set()

         self.model1.p = Param(self.model1.N, self.model1.T)

         self.data1 = DataPortal(model=self.model1)
         self.data1.load(filename="optdata1.xlsx", range="T", format="set", set="T")
         self.data1.load(filename="optdata1.xlsx", range="N", format="set", set="N")
         self.data1.load(filename="optdata1.xlsx", range="p", param="p", format="array")

         self.data1.flow = Var(self.model1.N, self.model1.T)

         self.instance = self.model1.create_instance(self.data1)
         self.instance.pprint()

    if __name__ == "__main__":
         a()

Я хочу решить две задачи оптимизации с помощью Pyomo. Когда я запускаю этот код для параллельного запуска двух моделей оптимизации, я получаю сообщение об ошибке TypeError: Невозможно сериализовать объект _io.BufferedWriter. Как мне решить эту ошибку? Есть ли альтернативный способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...